Resumen

Este informe presenta una investigación sobre el impacto de la pandemia de COVID-19 en el rendimiento académico de estudiantes de primer año. Se utilizaron técnicas espaciales para examinar las calificaciones obtenidas durante los años 2017, 2018, 2020, 2021 y 2021, donde la principal contribución corresponde a la aplicación de un modelo bayesiano multivariado condicionalmente autorregresivo (MCAR) para explicar y predecir las calificaciones a partir de ́ındices de pobreza, desarrollo comunal, cantidad de colegios particulares y promedio PSU por comuna. Este enfoque nos permitió contrastar ajustes de modelos clásicos que no consideran la componente espacial y modelos areales que poseen dependencia de vecinos contiguos. Los métodos anteriores fueron aplicados en las regiones de Valparaíso y Metropolitana al existir mayor cantidad de estudiantes en estas zonas. Los resultados muestran como las calificaciones no se correlacionan con las covariables propuestas, a diferencia de años previos a la pandemia.

Introducción

El rendimiento de los estudiantes universitarios ha sido siempre un tema de interés para las universidades. Para la Universidad Técnica Federico Santa María lo ha sido particularmente con sus alumnos de primer año, puesto que históricamente han tenido una alta tasa de reprobación en ramos del ciclo básico de ingeniería (Del Rio 2018). Sin embargo, la pandemia de COVID19 provocó resultados nunca antes vistos en la universidad a lo largo de todas las carreras, sin importar el año de ingreso. Esto motivó en primer lugar el análisis a realizar, donde buscaremos explicar y predecir las calificaciones de primer año.

Para esto, visualizaremos los datos mediante herramientas clásicas del análisis descriptivo, para luego verificar como se distribuyen los promedios de notas de las principales asignaturas a lo largo de las regiones de Chile.

Enseguida se presentará una introducción a la estadística espacial, donde se revisarán conceptos de autocorrelación espacial y modelos de área. Esto se ejemplificará a través del índice de Morán y los modelos condicionalmente autoregresivos, CAR.

En lo que sigue, y en honor a la poca cantidad de datos para realizar un análisis de caracter nacional, nos centraremos en la región de Valparaíso y sus comunas. Aplicaremos los conceptos revisados anteriormente usando como variables explicativas ́ındices de pobreza, desarrollo comunal, cantidad de colegios particulares, promedio PSU por comuna y compararemos los modelos CAR para los casos univariados y multivariados con métodos clásicos de Machine Learning. Para discernir el rendimiento de estos se utilizará el criterio de información bayesiano, BIC.

Finalmente, se presentarán los resultados y las conclusiones obtenidas del análisis.

Análisis exploratorio de datos

La base de datos contiene información de las calificaciones obtenidas durante los años 2020 y 2021 por todos los estudiantes de campus y sedes de la universidad resumida de la siguiente manera:

2017-1

2017-2

Acá se puede escribir:

2018-1

Acá se puede escribir:

2018-2

Acá se puede escribir:

2020-1

Acá se puede escribir:

2020-2

2021-1

2021-2

2022-1

2022-2

Para realizar el análisis descriptivo, se modificó la base de datos de la siguiente manera:

  • Se escogieron solo estudiantes de primer año de 2020 y 2021.

  • Fueron seleccionadas las asignaturas de FIS100, FIS110, MAT021, MAT022, IWI131, QUI010 y IWG101.

  • Se filtró por estudianes que tuvieran su ESTADO NOTA como aprobada o reprobada.

  • Se elimaron columnas que no fueran de interés y fue resumida la información de cada estudiante en una sola observación.

La base de datos modificada se presenta a continuación

2017-1

2017-2

2018-1

2018-2

2020-1

2020-2

2021-1

2021-2

2022-1

2022-2

El número de estudiantes provenientes de cada región se presenta en las siguientes figuras

2017

2018

2020

2021

2022

Podemos observar que en ambos años la mayoría de estudiantes proviene de la región de Valparaíso y Metropolitana, mientras que la región de Aysén posee la menor tasa de ingreso. Ahora bien, continuando con el análisis, los siguientes Donut Plot nos permiten visualizar la tasa de aprobación por semestre de los ramos clásicos de primer año académico.

2020-1

2020-2

2021-1

2021-2

En base a los gráficos anteriores podemos rescatar las siguientes conclusiones:

  • La tasa de reprobación durante los primeros semestres en todos los ramos es baja.

  • Durante el año 2020 se obtuvieron, en general, mejores rendimientos que el 2021.

  • FIS110, MAT022 y QUI010 se adjudicaron la “mayor” tasa de reprobación.

  • IWG101 fue la asignatura con mejor rendimiento durante los periodos analizados.

  • Los semestres pares tuvieron altas tasas de reprobación en asignaturas propias de primer semestre según malla académica.

Enseguida, una pregunta interesante a responder es: ¿Cómo se visualizan las notas anteriores geograficamente? Para ello utilizamos el mapa de Chile extraído de Global Administrative Areas (2012) seccionado por regiones. Luego, se obtienen las siguientes figuras

2020-1

2020-2

2021-1

2021-2

De lo anterior, podemos desprender conclusiones que antes no poseíamos:

  • La gran mayoría de regiones aprobó con notas superiores a 70 en promedio.

  • La zona norte de Chile obtuvo los rendimientos, en promedio, más descendidos.

  • Las regiones provenientes de la zona sur de Chile obtuvieron los rendimientos más altos.

  • La asignatura que, en promedio, tuvo los rendimientos más bajos fueron QUI010 y FIS110.

Autocorrelación espacial: Índice de Moran

Dadas las observaciones \(Y_1,\ldots,Y_n\) asociadas a una secuencia espacial , Moran (1950) propuso el siguiente estadístico para medir la presencia de autocorrelación de una secuencia espacial

\[I=\frac{n \sum_i \sum_j w_{i j}\left(Y_i-\bar{Y}\right)\left(Y_j-\bar{Y}\right)}{\left(\sum_{i \neq j} w_{i j}\right) \sum_i\left(Y_i-\bar{Y}\right)^2}\] donde \(w_{ij}\) son pesos espaciales entre los sitios y \(\bar{Y}\) denota el promedio de las observaciones. Bajo normalidad y asumiendo media constante del proceso, se tiene que \(\mathbb{E}[I]=-\frac{1}{n-1}\). En la práctica, se considera que

  • Si \(I>\mathbb{E}[I]\), entonces un sitio tiende a conectarse a los sitios que tiene similares atributos. La correlación espacial es positiva y aumenta a medida que el valor \(|I-\mathbb{E}[I]|\) lo hace.

  • Si \(I<\mathbb{E}[I]\), los valores de sitios conectados a un sitio en particular tienden a ser disimiles o diferentes.

Modelos CAR univariados y multivariados

Un modelo CAR (Conditional Autoregressive) es un tipo de modelo estadístico utilizado para analizar datos espaciales. Se usa frecuentemente para modelar la relación entre las observaciones de una variable en diferentes lugares geográficos. El modelo asume que la variable en cada punto está relacionada con las variables en los puntos vecinos, y se utiliza para generar predicciones para puntos sin datos. A pesar de que hayan sido introducidos hace décadas atras por Besag (1974). Han tomado mayor relevancia por su aplicación en temas ingenieriles y médicos.

Para el caso Gaussiano, dadas las componentes espacial \(\{\mathbf{s}_i\}_{i=1}^n\), asociamos un efecto espacial latente \(\{\phi(\mathbf{s}_i)\}_{i=1}^n\). El modelo CAR se formula a partir de sus distribuciones full condicionadas como

\[\phi_i \mid \phi_j, j \neq i \sim N\left(\sum_{j=1}^{n} c_{ij}y_j, \sigma_i^2\right).\] donde \(\sigma_i\) es un parámetro de covarianza espacial y \(\mathbf{C}=\{c_{ij}\}\) es una matriz \(n\times n\) asociada con las componentes espaciales.

Si definimos \(\mathbf{M}=\text{diag}(\sigma_1^2,\ldots,\sigma_n^2)\). Bajo la condición de simetría de \(\mathbf{M}^{-1}\mathbf{C}\) y que \(\mathbf{M}^{-1}(\mathbf{I}_n-\mathbf{C})\) sea definida positiva (Cressie 1993), la distribución conjunta de \(\boldsymbol{\phi}\) está bien definida como

\[\boldsymbol{\phi}\sim N(\mathbf{0},\mathbf{\Sigma}_{\text{CAR}})\] donde \(\mathbf{\Sigma}_{\text{CAR}}=(\mathbf{I}_n-\mathbf{C})^{-1}\mathbf{M}\).

Usualmente, es considerado que \(\mathbf{C}=\rho\mathbf{W}\) y \(\mathbf{M}=\sigma^2\mathbf{I}_n\), donde \(\boldsymbol{W}\) es una matriz de pesos espaciales, \(\rho\) es un parámetro de suavizamiento y \(\mathbf{\Sigma}_{\text{CAR}}=\sigma^2\left(\mathbf{I}_n-\rho \mathbf{W}\right)^{-1}\) si \(\mathbf{W}\) es simétrica. Más aún, si \(\mathbf{W}\) es además estandariza por fila, \(\mathbf{\Sigma}_{\text{CAR}}=\sigma^2(\mathbf{D}-\rho \mathbf{W})^{-1}\), donde \(\mathbf{D}=\text{diag}(\mathbf{W}_{1+},\ldots,\mathbf{W}_{n+})\) y \(\mathbf{W}_{i+}\) es la suma de los elementos de la \(i\)-ésima fila de la matriz \(\mathbf{W}\) para cada \(i=1,\ldots,n\).

Banerjee, Carlin, y Gelfand (2003) extendieron el modelo anterior a uno full condicionado considerando \(\boldsymbol{\phi}^{\top}=(\boldsymbol{\phi}_1,\ldots,\boldsymbol{\phi}_n)\), donde cada \(\boldsymbol{\phi}_i=(\phi_{i1},\ldots,\phi_{ip})^{\top}\in\mathbb{R}^{p}\). Así, la distribución conjunta está definida como

\[\boldsymbol{\phi}\sim N(\mathbf{0},\mathbf{\Sigma}_{\text{MCAR}})\] donde \(\mathbf{\Sigma}_{\text{MCAR}}=\Lambda\otimes(\mathbf{D}-\rho\mathbf{W})^{-1}\) y \(\Lambda\) es una matriz de covarianza definida positiva que ajusta la correlación no espacial entre variables en cualquier región \(\mathbf{s}_i\), para \(i=1,\ldots,n\).

Diversas variaciones ha tenido el modelo. Leroux, Lei, y Breslow (2000) propusieron una distribución conjunta (bajo los supuestos adecuados) de los efectos espaciales dada por \[\boldsymbol{\phi} \sim \mathrm{N}\left(\mathbf{0},\left[\mathbf{Q}(\mathbf{W}, \rho) \otimes \mathbf{\Sigma}^{-1}\right]^{-1}\right)\] Aquí \(\mathbf{Q}(\mathbf{W}, \rho)=\rho[\operatorname{diag}(\mathbf{W} \mathbf{1})-\mathbf{W}]+(1-\rho) \mathbf{I}\) es la matriz de precisión, mientras que \(\mathbf{\Sigma}\) es una matriz de covarianza cruzada entre las variables.

Implementación

Para la aplicación se utilizó \(\texttt{R}\) siguiendo los lineamientos presentes en Banerjee, Carlin, y Gelfand (2003). El índice de Morán se encuentra en la librería \(\texttt{spdep}\) y la implementación del modelo MCAR será a través de un marco bayesiano debido a la estructura condicional explícita, como señalan Gelfand y Vounatsou (2003). Para ello, utilizaremos la librería \(\texttt{CARBayes}\) (Lee 2013). Se ajustó un modelo lineal suponiendo que \(Y_{kj}\sim N(\mu_{kj},\sigma_j^2)\) y \(\mu_{kj}=\mathbf{x}_k^{\top}\boldsymbol{\beta}_j+\phi_{kj}\), donde los efectos aleatorios espaciales siguen la estructura MCAR de Leroux.

Aplicación en la region de Valparaíso

Dada la poca cantidad de datos para realizar un análisis de caracter nacional, nos centraremos en la región de Valparaíso y sus comunas. Aplicaremos el modelo lineal anterior usando como variables explicativas:

  1. Índice de pobreza (Ministerio de Desarrollo Social y Familia 2020) ajustado usando la metodología de áreas pequeñas (SAE, por su sigla en inglés). Se encarga de medir el porcentaje de personas en situación de pobreza por ingresos.

  2. Índice de desarrollo comunal (Universidad Autonoma de Chile 2020) que otorga un puntaje a las comunas de Chile que varía entre 0 y 1 según sus condiciones económicas, educativas y de salud.

  3. Puntaje PSU 2017 por comunas de la región que analiza el promedio de las pruebas de matemáticas y lenguaje .

  4. Tasa de colegios particulares por número total de establecimientos educacionales, esto fue calculado usando datos oficiales de la biblioteca del congreso nacional de Chile.

Graficamente lo anterior se visualiza en la siguiente figura

IDP

IDC

PPC

TCP

Mediante gráficos similares podemos visualizar las notas por semestre

MAT021 2017-1

FIS100 2017-2

Ahora, el grafo formado por las comunas de la región que nos permitirá formar la matriz de contiguidad se presenta a continuación

Resultados

Conclusiones y trabajos futuros

Banerjee, Sudipto, Bradley P Carlin, y Alan E Gelfand. 2003. Hierarchical modeling and analysis for spatial data. Chapman; Hall/CRC.
Besag, Julian. 1974. «Spatial interaction and the statistical analysis of lattice systems». Journal of the Royal Statistical Society: Series B (Methodological) 36 (2): 192-225.
Cressie, Noel. 1993. Statistics for spatial data. John Wiley & Sons.
Del Rio, Jose Pablo. 2018. «Modelo predictivo para la retencion de estudiantes de primeros años». Mathesis, Universidad Tecnica Federico Santa Maria.
Gelfand, Alan E., y Penelope Vounatsou. 2003. «Proper multivariate conditional autoregressive models for spatial data analysis.» Biostatistics 4 1: 11-25.
Global Administrative Areas. 2012. GADM database of Global Administrative Areas. www.gadm.org.
Lee, Duncan. 2013. «CARBayes: An R Package for Bayesian Spatial Modeling with Conditional Autoregressive Priors». Journal of Statistical Software. https://www.jstatsoft.org/htaccess.php?volume=55&type=i&issue=13.
Leroux, Brian G., Xingye Lei, y Norman E. Breslow. 2000. «Estimation of Disease Rates in Small Areas: A new Mixed Model for Spatial Dependence». En.
Ministerio de Desarrollo Social y Familia. 2020. Estimaciones de pobreza comunal. http://observatorio.ministeriodesarrollosocial.gob.cl/pobreza-comunal.
Moran, Patrick AP. 1950. «Notes on continuous stochastic phenomena». Biometrika 37 (1/2): 17-23.
Universidad Autonoma de Chile. 2020. Indice de desarrollo comunal. https://doi.org/10.32457/ISBN9789568454944962020-ED1.
LS0tDQp0aXRsZTogIkFuw6FsaXNpcyBlc3BhY2lhbCBkZSBjYWxpZmljYWNpb25lcyBvYnRlbmlkYXMgZHVyYW50ZSBsYSBwYW5kZW1pYSBwb3INCmVzdHVkaWFudGVzIGRlIHByaW1lciBhw7FvIg0KbGFuZzogZXMNCmF1dGhvcjogIkNsZW1lbnRlIEZlcnJlciINCmRhdGU6ICcyMyBkZSBFbmVybyBkZWwgMjAyMycNCm91dHB1dDogDQogIGh0bWxfZG9jdW1lbnQ6DQogICAgdG9jOiB0cnVlDQogICAgdG9jX2Zsb2F0OiB0cnVlDQogICAgY29kZV9kb3dubG9hZDogdHJ1ZQ0KYmlibGlvZ3JhcGh5OiByZWZlcmVuY2VzLmJpYg0KbGluay1jaXRhdGlvbnM6IHllcw0KbGlua2NvbG9yOiBibHVlDQotLS0NCg0KYGBgez1odG1sfQ0KPHN0eWxlPg0KLmxlYWZsZXQgew0KICAgIG1hcmdpbjogYXV0bzsNCn0NCjwvc3R5bGU+DQpgYGANCmBgYHs9aHRtbH0NCjxzdHlsZSB0eXBlPSJ0ZXh0L2NzcyI+DQoNCmgxLnRpdGxlIHsNCiAgZm9udC1zaXplOiAzMHB4Ow0KICBjb2xvcjogRGFya1JlZDsNCiAgdGV4dC1hbGlnbjogY2VudGVyOw0KfQ0KaDQuYXV0aG9yIHsgLyogSGVhZGVyIDQgLSBhbmQgdGhlIGF1dGhvciBhbmQgZGF0YSBoZWFkZXJzIHVzZSB0aGlzIHRvbyAgKi8NCiAgICBmb250LXNpemU6IDE2cHg7DQogIGZvbnQtZmFtaWx5OiAiVGltZXMgTmV3IFJvbWFuIiwgVGltZXMsIHNlcmlmOw0KICBjb2xvcjogQmxhY2s7DQogIHRleHQtYWxpZ246IGNlbnRlcjsNCn0NCmg0LmRhdGUgeyAvKiBIZWFkZXIgNCAtIGFuZCB0aGUgYXV0aG9yIGFuZCBkYXRhIGhlYWRlcnMgdXNlIHRoaXMgdG9vICAqLw0KICBmb250LXNpemU6IDE2cHg7DQogIGZvbnQtZmFtaWx5OiAiVGltZXMgTmV3IFJvbWFuIiwgVGltZXMsIHNlcmlmOw0KICBjb2xvcjogQmxhY2s7DQogIHRleHQtYWxpZ246IGNlbnRlcjsNCn0NCjwvc3R5bGU+DQpgYGANCmBgYHs9aHRtbH0NCjxzdHlsZSB0eXBlPSJ0ZXh0L2NzcyI+DQogIGJvZHl7DQogIGZvbnQtZmFtaWx5OiBIZWx2ZXRpY2E7DQogIGZvbnQtc2l6ZTogMTJwdDsNCn0NCjwvc3R5bGU+DQpgYGANCmBgYHtyIHNldHVwLCBpbmNsdWRlPUZBTFNFfQ0Ka25pdHI6Om9wdHNfY2h1bmskc2V0KGVjaG8gPSBUUlVFKQ0KZmlnLmFsaWduPSdjZW50ZXInDQpsaWJyYXJ5KERUKQ0KbGlicmFyeSh4YXJpbmdhbkV4dHJhKQ0KeGFyaW5nYW5FeHRyYTo6dXNlX3BhbmVsc2V0KCkNCnhhcmluZ2FuRXh0cmE6OnN0eWxlX3BhbmVsc2V0X3RhYnMoZm9udF9mYW1pbHkgPSAiaW5oZXJpdCIpDQpsaWJyYXJ5KHJlYWR4bCkNCmxpYnJhcnkoZHBseXIpDQpsaWJyYXJ5KHN0cmluZ2kpDQpsaWJyYXJ5KGdnbWFwKSANCmxpYnJhcnkobHVicmlkYXRlKQ0KbGlicmFyeSh0aWR5cikNCmxpYnJhcnkocmVhZHIpDQpsaWJyYXJ5KG9wZW54bHN4KQ0KbGlicmFyeShnZW9kYXRhKQ0KbGlicmFyeShzcCkNCmxpYnJhcnkoc3RyaW5ncikNCmxpYnJhcnkoUkNvbG9yQnJld2VyKQ0KbGlicmFyeSh0b29scykNCmxpYnJhcnkodGlkeXRlcnJhKQ0KbGlicmFyeShnZ3Bsb3QyKQ0KbGlicmFyeShzZikNCmxpYnJhcnkoZ2d0aGVtZXMpDQpsaWJyYXJ5KGdyaWQpDQpsaWJyYXJ5KHRpZHl2ZXJzZSkNCmxpYnJhcnkoc2hvd3RleHQpDQpsaWJyYXJ5KHNwZGVwKSAjSGFjZSBjYXNpIHRvZGEgbGEgcGVnYQ0KbGlicmFyeShnZ3RleHQpDQpsaWJyYXJ5KHdyaXRleGwpDQpsaWJyYXJ5KGJpYnRleCkNCmxpYnJhcnkoUmVmTWFuYWdlUikNCmxpYnJhcnkobGVhZmxldCkNCmBgYA0KDQpgYGB7ciwgaW5jbHVkZT1GQUxTRX0NCg0KIyMgTG9hZGluZyBHb29nbGUgZm9udHMgKGh0dHBzOi8vZm9udHMuZ29vZ2xlLmNvbS8pDQpmb250X2FkZF9nb29nbGUoIk9wZW4gU2FucyIsICJvcGVuc2FucyIpDQpmb250X2FkZF9nb29nbGUoIkxhdG8iLCAibGF0byIpDQoNCiMjIEF1dG9tYXRpY2FsbHkgdXNlIHNob3d0ZXh0IHRvIHJlbmRlciB0ZXh0DQpzaG93dGV4dF9hdXRvKCkNCg0KZGF0YV9jbGVhbiA8LSBmdW5jdGlvbihkYXRhLCBhw7FvKSB7DQogIGRhdGFfZGVsIDwtIHN1YnNldChkYXRhLCBzZWxlY3QgPSAtYyhOT01CUkVTLCBBUEVMTElET1MsIENPUlJFTywgUlVULCBBU0lHTkFUVVJBKSkNCiAgDQogICMgRGF0b3MgZmlsdHJhZG9zIGNvbiByYW1vcyBkZSBwcmltZXIgYcOxbw0KICBlc3RhZG9fYXNpZ25hdHVyYSA8LSBjKCJTaW4gVlRSIiwgIkluc2NyaXRhIikNCiAgZXN0YWRvX25vdGEgPC0gYygiQXByb2JhZGEiLCAiUmVwcm9iYWRhIikNCiAgc2lnbGFzIDwtIGMoIklXSTEzMSIsICJNQVQwMjEiLCAiTUFUMDIyIiwgIlFVSTAxMCIsICJGSVMxMDAiLCAiRklTMTEwIiwgIklXRzEwMSIpDQogIGRhdGFfZmlsdHJhZG8gPC0gc3Vic2V0KGRhdGFfZGVsLCBTSUdMQSAlaW4lIHNpZ2xhcyAmIA0KICAgICAgICAgICAgICAgICAgICAgICAgICAgIEVTVEFET19BU0lHTkFUVVJBICVpbiUgZXN0YWRvX2FzaWduYXR1cmEgJg0KICAgICAgICAgICAgICAgICAgICAgICAgICAgIEVTVEFET19OT1RBICVpbiUgZXN0YWRvX25vdGEgJg0KICAgICAgICAgICAgICAgICAgICAgICAgICAgIFJFR0lPTl9PUklHRU4gIT0gIlNJTiBJTkZPUk1BQ0nDk04iKQ0KICANCiAgIyBPcmRlbmFyIHBvciByb2wNCiAgZGF0YV90YXJnZXQgPC0gZGF0YV9maWx0cmFkb1tvcmRlcihkYXRhX2ZpbHRyYWRvJFJPTCksXQ0KICANCiAgIyBGaWx0cmFyIHBvciBsb3MgaW5ncmVzb3MgMjAxOCAobWVjaG9uZXMpDQogIGRhdGFfcmVhbCA8LSBkYXRhX3RhcmdldFtncmVwKGHDsW8sIGRhdGFfdGFyZ2V0JFJPTCksIF0NCiAgDQogICMgRGF0YWZyYW1lIGF1eGlsaWFyIGNvbiB0b2RhIGxhIGluZm9ybWFjacOzbiBkZWwgbWlzbW8gZXN0dWRpYW50ZSBlbiAxIG9ic2VydmFjacOzbg0KICBkZl9hdXggPC0gZGF0YV9yZWFsICU+JSBmaWx0ZXIoIWR1cGxpY2F0ZWQoUk9MKSkNCiAgZGZfYXV4IDwtIHN1YnNldChkZl9hdXgsIHNlbGVjdCA9IC1jKFNJR0xBLCBFU1RBRE9fQVNJR05BVFVSQSwgRVNUQURPX05PVEEsIE5PVEEpKQ0KICANCiAgZm9yIChpIGluIDE6bGVuZ3RoKHNpZ2xhcykpIHsNCiAgICBkZl9hdXhbc2lnbGFzW2ldXSA8LSBOQQ0KICAgIGZvciAoaiBpbiAxOm5yb3coZGF0YV9yZWFsKSkgew0KICAgICAgcm93X2luZGV4IDwtIHdoaWNoKGRmX2F1eCRST0wgPT0gZGF0YV9yZWFsW2osICJST0wiXSRST0wpDQogICAgICBkZl9hdXhbcm93X2luZGV4LCBkYXRhX3JlYWxbaiwgIlNJR0xBIl0kU0lHTEFdIDwtIGRhdGFfcmVhbFtqLCAiTk9UQSJdJE5PVEENCiAgICB9DQogIH0NCiAgDQogICMgRGF0YWZyYW1lIGZpbmFsIGNvbiBwcm92aW5jaWFzIHkgbG9jYWxpemFjaW9uZXMgZ2VvZ3LDoWZpY2FzIGHDsWFkaWRhcyBzZWfDum4gY29tdW5hIA0KICBjb211bmFzX3dpa2kgPC0gcmVhZF9leGNlbCgiQzovVXNlcnMvY2NmZXIvRGVza3RvcC9jb211bmFzX2ludGVyw6lzLnhsc3giKQ0KICBjb211bmFzX3dpa2kgPC0gY29tdW5hc193aWtpICU+JSBzbGljZSgtMSkNCiAgY29tdW5hc193aWtpIDwtIHN1YnNldChjb211bmFzX3dpa2ksIHNlbGVjdCA9IGMoTm9tYnJlLCBQcm92aW5jaWEsIExhdGl0dWQsIExvbmdpdHVkKSkgI1BPU0lCTEVTIEVYVEVOU0lPTkVTDQogIA0KICBjb211bmFzX3dpa2kkUHJvdmluY2lhIDwtIGdzdWIoIlRhbWFydWdhbCIsICJJcXVpcXVlIiwgY29tdW5hc193aWtpJFByb3ZpbmNpYSkNCiAgY29tdW5hc193aWtpJFByb3ZpbmNpYSA8LSBnc3ViKCJJcXVpcXVlIiwgIklxdWlxdWUgeSBUYW1hcnVnYWwiLCBjb211bmFzX3dpa2kkUHJvdmluY2lhKQ0KICBjb211bmFzX3dpa2kkUHJvdmluY2lhIDwtIGdzdWIoIlNhbiBGZWxpcGUgZGUgQWNvbmNhZ3VhIiwgIlNhbiBGZWxpcGUiLCBjb211bmFzX3dpa2kkUHJvdmluY2lhKQ0KICBjb211bmFzX3dpa2kkUHJvdmluY2lhIDwtIGdzdWIoIkJpb2LDrW8iLCAiQsOtby1Cw61vIiwgY29tdW5hc193aWtpJFByb3ZpbmNpYSkNCiAgDQogIGNvbXVuYXNfd2lraSROb21icmUgPC0gdG91cHBlcihjb211bmFzX3dpa2kkTm9tYnJlKQ0KICBjb211bmFzX3dpa2kkTm9tYnJlIDwtIGNoYXJ0cigiw6DDqMOsw7LDucOAw4jDjMOSw5nDocOpw63Ds8O6w4HDicONw5PDmiIsICJhZWlvdUFFSU9VYWVpb3VBRUlPVSIsIGNvbXVuYXNfd2lraSROb21icmUpDQogIGNvbXVuYXNfd2lraSROb21icmUgPC0gZ3N1YigiLSIsICIgIiwgY29tdW5hc193aWtpJE5vbWJyZSkNCiAgZGZfYXV4JENPTVVOQV9PUklHRU4gPC0gY2hhcnRyKCLDoMOow6zDssO5w4DDiMOMw5LDmcOhw6nDrcOzw7rDgcOJw43Dk8OaIiwgImFlaW91QUVJT1VhZWlvdUFFSU9VIiwgZGZfYXV4JENPTVVOQV9PUklHRU4pDQogIGRmX2F1eCRDT01VTkFfT1JJR0VOIDwtIGdzdWIoIi0iLCAiICIsIGRmX2F1eCRDT01VTkFfT1JJR0VOKQ0KICANCiAgZGZfYXV4WyJQcm92aW5jaWEiXSA8LSBOQQ0KICANCiAgZm9yIChpIGluIDE6bGVuZ3RoKGRmX2F1eCRDT01VTkFfT1JJR0VOKSl7DQogICAgcm93X2luZGV4IDwtIHdoaWNoKGNvbXVuYXNfd2lraSROb21icmUgPT0gZGZfYXV4W2ksICJDT01VTkFfT1JJR0VOIl0kQ09NVU5BX09SSUdFTikNCiAgICBkZl9hdXhbaSwgIlByb3ZpbmNpYSJdJFByb3ZpbmNpYSA8LSBjb211bmFzX3dpa2lbcm93X2luZGV4LCAiUHJvdmluY2lhIl0kUHJvdmluY2lhDQogIH0NCiAgDQogIGRmX2F1eCRSRUdJT05fT1JJR0VOW2RmX2F1eCRQcm92aW5jaWEgPT0gIkl0YXRhIl0gPC0gIsORdWJsZSINCiAgZGZfYXV4JFJFR0lPTl9PUklHRU5bZGZfYXV4JFByb3ZpbmNpYSA9PSAiRGlndWlsbMOtbiJdIDwtICLDkXVibGUiDQogIGRmX2F1eCRSRUdJT05fT1JJR0VOW2RmX2F1eCRQcm92aW5jaWEgPT0gIlB1bmlsbGEiXSA8LSAiw5F1YmxlIg0KICANCiAgZGZfYXV4JFJFR0lPTl9PUklHRU5bZGZfYXV4JFJFR0lPTl9PUklHRU4gPT0gIlJFR0nDk04gREUgVkFMUEFSQcONU08iXSA8LSAiVmFscGFyYcOtc28iDQogIGRmX2F1eCRSRUdJT05fT1JJR0VOW2RmX2F1eCRSRUdJT05fT1JJR0VOID09ICJSRUdJw5NOIERFIENPUVVJTUJPIl0gPC0gIkNvcXVpbWJvIg0KICBkZl9hdXgkUkVHSU9OX09SSUdFTltkZl9hdXgkUkVHSU9OX09SSUdFTiA9PSAiUkVHScOTTiBBUklDQS1QQVJJTkFDT1RBIl0gPC0gIkFyaWNhIHkgUGFyaW5hY290YSINCiAgZGZfYXV4JFJFR0lPTl9PUklHRU5bZGZfYXV4JFJFR0lPTl9PUklHRU4gPT0gIlJFR0nDk04gTUVUUk9QT0xJVEFOQSJdIDwtICJTYW50aWFnbyBNZXRyb3BvbGl0YW4iDQogIGRmX2F1eCRSRUdJT05fT1JJR0VOW2RmX2F1eCRSRUdJT05fT1JJR0VOID09ICJSRUdJw5NOIERFTCBNQVVMRSJdIDwtICJNYXVsZSINCiAgZGZfYXV4JFJFR0lPTl9PUklHRU5bZGZfYXV4JFJFR0lPTl9PUklHRU4gPT0gIlJFR0nDk04gREUgTEEgQVJBVUNBTsONQSJdIDwtICJBcmF1Y2Fuw61hIg0KICBkZl9hdXgkUkVHSU9OX09SSUdFTltkZl9hdXgkUkVHSU9OX09SSUdFTiA9PSAiUkVHScOTTiBERSBBTlRPRkFHQVNUQSJdIDwtICJBbnRvZmFnYXN0YSINCiAgZGZfYXV4JFJFR0lPTl9PUklHRU5bZGZfYXV4JFJFR0lPTl9PUklHRU4gPT0gIlJFR0nDk04gREUgQVRBQ0FNQSJdIDwtICJBdGFjYW1hIg0KICBkZl9hdXgkUkVHSU9OX09SSUdFTltkZl9hdXgkUkVHSU9OX09SSUdFTiA9PSAiUkVHScOTTiBERSBMT1MgTEFHT1MiXSA8LSAiTG9zIExhZ29zIg0KICBkZl9hdXgkUkVHSU9OX09SSUdFTltkZl9hdXgkUkVHSU9OX09SSUdFTiA9PSAiUkVHScOTTiBERSBMT1MgUsONT1MiXSA8LSAiTG9zIFLDrW9zIg0KICBkZl9hdXgkUkVHSU9OX09SSUdFTltkZl9hdXgkUkVHSU9OX09SSUdFTiA9PSAiUkVHScOTTiBERUwgTElCRVJUQURPUiBHRU5FUkFMIEJFUk5BUkRPIE8nSElHR0lOUyJdIDwtICJMaWJlcnRhZG9yIEdlbmVyYWwgQmVybmFyZG8gTydIaSINCiAgZGZfYXV4JFJFR0lPTl9PUklHRU5bZGZfYXV4JFJFR0lPTl9PUklHRU4gPT0gIlJFR0nDk04gREVMIELDjU8tQsONTyJdIDwtICJCw61vLULDrW8iDQogIGRmX2F1eCRSRUdJT05fT1JJR0VOW2RmX2F1eCRSRUdJT05fT1JJR0VOID09ICJSRUdJw5NOIERFIFRBUkFQQUPDgSJdIDwtICJUYXJhcGFjw6EiDQogIGRmX2F1eCRSRUdJT05fT1JJR0VOW2RmX2F1eCRSRUdJT05fT1JJR0VOID09ICJSRUdJw5NOIERFIEFZU8OJTiBERUwgR0VORVJBTCBDQVJMT1MgSULDgcORRVogREVMIENBTVAiXSA8LSAiQXlzw6luIGRlbCBHZW5lcmFsIEliYcOxZXogZGVsIENhbSINCiAgZGZfYXV4JFJFR0lPTl9PUklHRU5bZGZfYXV4JFJFR0lPTl9PUklHRU4gPT0gIlJFR0nDk04gREUgTUFHQUxMQU5FUyBZIERFIExBIEFOVMOBUlRJQ0EgQ0hJTEVOQSJdIDwtICJNYWdhbGxhbmVzIHkgQW50w6FydGljYSBDaGlsZW5hIg0KICANCiAgZGYgPC0gZGZfYXV4DQp9DQoNCmBgYA0KDQpgYGB7PWh0bWx9DQo8c3R5bGU+DQpib2R5IHsNCnRleHQtYWxpZ246IGp1c3RpZnl9DQo8L3N0eWxlPg0KYGBgDQo8Y2VudGVyPioqUmVzdW1lbioqPC9jZW50ZXI+DQoNCkVzdGUgaW5mb3JtZSBwcmVzZW50YSB1bmEgaW52ZXN0aWdhY2nDs24gc29icmUgZWwgaW1wYWN0byBkZSBsYSBwYW5kZW1pYSBkZSBDT1ZJRC0xOSBlbiBlbCByZW5kaW1pZW50byBhY2Fkw6ltaWNvIGRlIGVzdHVkaWFudGVzIGRlIHByaW1lciBhw7FvLiBTZSB1dGlsaXphcm9uIHTDqWNuaWNhcyBlc3BhY2lhbGVzIHBhcmEgZXhhbWluYXIgbGFzIGNhbGlmaWNhY2lvbmVzIG9idGVuaWRhcyBkdXJhbnRlIGxvcyBhw7FvcyAyMDE3LCAyMDE4LCAyMDIwLCAyMDIxIHkgMjAyMSwgZG9uZGUgbGEgcHJpbmNpcGFsIGNvbnRyaWJ1Y2nDs24gY29ycmVzcG9uZGUgYSBsYSBhcGxpY2FjacOzbiBkZSB1biBtb2RlbG8gYmF5ZXNpYW5vIG11bHRpdmFyaWFkbyBjb25kaWNpb25hbG1lbnRlIGF1dG9ycmVncmVzaXZvIChNQ0FSKSBwYXJhIGV4cGxpY2FyIHkgcHJlZGVjaXIgbGFzIGNhbGlmaWNhY2lvbmVzIGEgcGFydGlyIGRlIMyBxLFuZGljZXMgZGUgcG9icmV6YSwgZGVzYXJyb2xsbyBjb211bmFsLCBjYW50aWRhZCBkZSBjb2xlZ2lvcyBwYXJ0aWN1bGFyZXMgeSBwcm9tZWRpbyBQU1UgcG9yIGNvbXVuYS4gRXN0ZSBlbmZvcXVlIG5vcyBwZXJtaXRpw7MgY29udHJhc3RhciBhanVzdGVzIGRlIG1vZGVsb3MgY2zDoXNpY29zIHF1ZSBubyBjb25zaWRlcmFuIGxhIGNvbXBvbmVudGUgZXNwYWNpYWwgeSBtb2RlbG9zIGFyZWFsZXMgcXVlIHBvc2VlbiBkZXBlbmRlbmNpYSBkZSB2ZWNpbm9zIGNvbnRpZ3Vvcy4gTG9zIG3DqXRvZG9zIGFudGVyaW9yZXMgZnVlcm9uIGFwbGljYWRvcyBlbiBsYXMgcmVnaW9uZXMgZGUgVmFscGFyYcOtc28geSBNZXRyb3BvbGl0YW5hIGFsIGV4aXN0aXIgbWF5b3IgY2FudGlkYWQgZGUgZXN0dWRpYW50ZXMgZW4gZXN0YXMgem9uYXMuIExvcyByZXN1bHRhZG9zIG11ZXN0cmFuIGNvbW8gbGFzIGNhbGlmaWNhY2lvbmVzIG5vIHNlIGNvcnJlbGFjaW9uYW4gY29uIGxhcyBjb3ZhcmlhYmxlcyBwcm9wdWVzdGFzLCBhIGRpZmVyZW5jaWEgZGUgYcOxb3MgcHJldmlvcyBhIGxhIHBhbmRlbWlhLg0KDQojIyBJbnRyb2R1Y2Npw7NuDQoNCkVsIHJlbmRpbWllbnRvIGRlIGxvcyBlc3R1ZGlhbnRlcyB1bml2ZXJzaXRhcmlvcyBoYSBzaWRvIHNpZW1wcmUgdW4gdGVtYSBkZSBpbnRlcsOpcyBwYXJhIGxhcyB1bml2ZXJzaWRhZGVzLiBQYXJhIGxhIFVuaXZlcnNpZGFkIFTDqWNuaWNhIEZlZGVyaWNvIFNhbnRhIE1hcsOtYSBsbyBoYSBzaWRvIHBhcnRpY3VsYXJtZW50ZSBjb24gc3VzIGFsdW1ub3MgZGUgcHJpbWVyIGHDsW8sIHB1ZXN0byBxdWUgaGlzdMOzcmljYW1lbnRlIGhhbiB0ZW5pZG8gdW5hIGFsdGEgdGFzYSBkZSByZXByb2JhY2nDs24gZW4gcmFtb3MgZGVsIGNpY2xvIGLDoXNpY28gZGUgaW5nZW5pZXLDrWEgW0B1c20yMDE4XS4gU2luIGVtYmFyZ28sIGxhIHBhbmRlbWlhIGRlIENPVklEMTkgcHJvdm9jw7MgcmVzdWx0YWRvcyBudW5jYSBhbnRlcyB2aXN0b3MgZW4gbGEgdW5pdmVyc2lkYWQgYSBsbyBsYXJnbyBkZSB0b2RhcyBsYXMgY2FycmVyYXMsIHNpbiBpbXBvcnRhciBlbCBhw7FvIGRlIGluZ3Jlc28uIEVzdG8gbW90aXbDsyBlbiBwcmltZXIgbHVnYXIgZWwgYW7DoWxpc2lzIGEgcmVhbGl6YXIsIGRvbmRlIGJ1c2NhcmVtb3MgZXhwbGljYXIgeSBwcmVkZWNpciBsYXMgY2FsaWZpY2FjaW9uZXMgZGUgcHJpbWVyIGHDsW8uDQoNClBhcmEgZXN0bywgdmlzdWFsaXphcmVtb3MgbG9zIGRhdG9zIG1lZGlhbnRlIGhlcnJhbWllbnRhcyBjbMOhc2ljYXMgZGVsIGFuw6FsaXNpcyBkZXNjcmlwdGl2bywgcGFyYSBsdWVnbyB2ZXJpZmljYXIgY29tbyBzZSBkaXN0cmlidXllbiBsb3MgcHJvbWVkaW9zIGRlIG5vdGFzIGRlIGxhcyBwcmluY2lwYWxlcyBhc2lnbmF0dXJhcyBhIGxvIGxhcmdvIGRlIGxhcyByZWdpb25lcyBkZSBDaGlsZS4NCg0KRW5zZWd1aWRhIHNlIHByZXNlbnRhcsOhIHVuYSBpbnRyb2R1Y2Npw7NuIGEgbGEgZXN0YWTDrXN0aWNhIGVzcGFjaWFsLCBkb25kZSBzZSByZXZpc2Fyw6FuIGNvbmNlcHRvcyBkZSBhdXRvY29ycmVsYWNpw7NuIGVzcGFjaWFsIHkgbW9kZWxvcyBkZSDDoXJlYS4gRXN0byBzZSBlamVtcGxpZmljYXLDoSBhIHRyYXbDqXMgZGVsIMOtbmRpY2UgZGUgTW9yw6FuIHkgbG9zIG1vZGVsb3MgY29uZGljaW9uYWxtZW50ZSBhdXRvcmVncmVzaXZvcywgQ0FSLg0KDQpFbiBsbyBxdWUgc2lndWUsIHkgZW4gaG9ub3IgYSBsYSBwb2NhIGNhbnRpZGFkIGRlIGRhdG9zIHBhcmEgcmVhbGl6YXIgdW4gYW7DoWxpc2lzIGRlIGNhcmFjdGVyIG5hY2lvbmFsLCBub3MgY2VudHJhcmVtb3MgZW4gbGEgcmVnacOzbiBkZSBWYWxwYXJhw61zbyB5IHN1cyBjb211bmFzLiBBcGxpY2FyZW1vcyBsb3MgY29uY2VwdG9zIHJldmlzYWRvcyBhbnRlcmlvcm1lbnRlIHVzYW5kbyBjb21vIHZhcmlhYmxlcyBleHBsaWNhdGl2YXMgzIHEsW5kaWNlcyBkZSBwb2JyZXphLCBkZXNhcnJvbGxvIGNvbXVuYWwsIGNhbnRpZGFkIGRlIGNvbGVnaW9zIHBhcnRpY3VsYXJlcywgcHJvbWVkaW8gUFNVIHBvciBjb211bmEgeSBjb21wYXJhcmVtb3MgbG9zIG1vZGVsb3MgQ0FSIHBhcmEgbG9zIGNhc29zIHVuaXZhcmlhZG9zIHkgbXVsdGl2YXJpYWRvcyBjb24gbcOpdG9kb3MgY2zDoXNpY29zIGRlIE1hY2hpbmUgTGVhcm5pbmcuIFBhcmEgZGlzY2VybmlyIGVsIHJlbmRpbWllbnRvIGRlIGVzdG9zIHNlIHV0aWxpemFyw6EgZWwgY3JpdGVyaW8gZGUgaW5mb3JtYWNpw7NuIGJheWVzaWFubywgQklDLg0KDQpGaW5hbG1lbnRlLCBzZSBwcmVzZW50YXLDoW4gbG9zIHJlc3VsdGFkb3MgeSBsYXMgY29uY2x1c2lvbmVzIG9idGVuaWRhcyBkZWwgYW7DoWxpc2lzLg0KDQojIyBBbsOhbGlzaXMgZXhwbG9yYXRvcmlvIGRlIGRhdG9zDQoNCkxhIGJhc2UgZGUgZGF0b3MgY29udGllbmUgaW5mb3JtYWNpw7NuIGRlIGxhcyBjYWxpZmljYWNpb25lcyBvYnRlbmlkYXMgZHVyYW50ZSBsb3MgYcOxb3MgMjAyMCB5IDIwMjEgcG9yIHRvZG9zIGxvcyBlc3R1ZGlhbnRlcyBkZSBjYW1wdXMgeSBzZWRlcyBkZSBsYSB1bml2ZXJzaWRhZCByZXN1bWlkYSBkZSBsYSBzaWd1aWVudGUgbWFuZXJhOg0KDQo6OjogcGFuZWxzZXQNCjwhLS0gMjAxNy0xIC0tPg0KDQo6OjogcGFuZWwNClsyMDE3LTFdey5wYW5lbC1uYW1lfQ0KDQpgYGB7ciwgZWNobz1GQUxTRX0NCg0KIyBMZWVyIGVsIGFyY2hpdm8gMjAxNy0xDQpkYXRhMjAxN18xIDwtIHJlYWRfZXhjZWwoIlBsYW50aWxsYSBOb3RhcyBGaW5hbGVzIDIueGxzeCIsIHNoZWV0ID0gMSkNCmRhdGF0YWJsZSgNCiAgaGVhZChkYXRhMjAxN18xLDQpLCBleHRlbnNpb25zID0gJ0ZpeGVkQ29sdW1ucycsDQogIG9wdGlvbnMgPSBsaXN0KA0KICAgIGRvbSA9ICd0JywNCiAgICBzY3JvbGxYID0gVFJVRSwNCiAgICBmaXhlZENvbHVtbnMgPSBUUlVFDQogICkpDQpgYGANCjo6Og0KDQo8IS0tIDIwMTctMiAtLT4NCg0KOjo6IHBhbmVsDQpbMjAxNy0yXXsucGFuZWwtbmFtZX0NCg0KQWPDoSBzZSBwdWVkZSBlc2NyaWJpcjoNCg0KYGBge3IsIGVjaG89RkFMU0V9DQoNCiMgTGVlciBlbCBhcmNoaXZvIDIwMTctMg0KZGF0YTIwMTdfMiA8LSByZWFkX2V4Y2VsKCJQbGFudGlsbGEgTm90YXMgRmluYWxlcyAyLnhsc3giLCBzaGVldCA9IDIpDQpkYXRhdGFibGUoDQogIGhlYWQoZGF0YTIwMTdfMiw0KSwgZXh0ZW5zaW9ucyA9ICdGaXhlZENvbHVtbnMnLA0KICBvcHRpb25zID0gbGlzdCgNCiAgICBkb20gPSAndCcsDQogICAgc2Nyb2xsWCA9IFRSVUUsDQogICAgZml4ZWRDb2x1bW5zID0gVFJVRQ0KICApKQ0KYGBgDQo6OjoNCg0KPCEtLSAyMDE4LTEgLS0+DQoNCjo6OiBwYW5lbA0KWzIwMTgtMV17LnBhbmVsLW5hbWV9DQoNCkFjw6Egc2UgcHVlZGUgZXNjcmliaXI6DQoNCmBgYHtyLCBlY2hvPUZBTFNFfQ0KDQojIExlZXIgZWwgYXJjaGl2byAyMDE4LTENCmRhdGEyMDE4XzEgPC0gcmVhZF9leGNlbCgiUGxhbnRpbGxhIE5vdGFzIEZpbmFsZXMgMi54bHN4Iiwgc2hlZXQgPSAzKQ0KZGF0YXRhYmxlKA0KICBoZWFkKGRhdGEyMDE4XzEsNCksIGV4dGVuc2lvbnMgPSAnRml4ZWRDb2x1bW5zJywNCiAgb3B0aW9ucyA9IGxpc3QoDQogICAgZG9tID0gJ3QnLA0KICAgIHNjcm9sbFggPSBUUlVFLA0KICAgIGZpeGVkQ29sdW1ucyA9IFRSVUUNCiAgKSkNCmBgYA0KOjo6DQoNCjwhLS0gMjAxOC0yIC0tPg0KDQo6OjogcGFuZWwNClsyMDE4LTJdey5wYW5lbC1uYW1lfQ0KDQpBY8OhIHNlIHB1ZWRlIGVzY3JpYmlyOg0KDQpgYGB7ciwgZWNobz1GQUxTRX0NCg0KIyBMZWVyIGVsIGFyY2hpdm8gMjAxOC0yDQpkYXRhMjAxOF8yIDwtIHJlYWRfZXhjZWwoIlBsYW50aWxsYSBOb3RhcyBGaW5hbGVzIDIueGxzeCIsIHNoZWV0ID0gNCkNCmRhdGF0YWJsZSgNCiAgaGVhZChkYXRhMjAxOF8yLDQpLCBleHRlbnNpb25zID0gJ0ZpeGVkQ29sdW1ucycsDQogIG9wdGlvbnMgPSBsaXN0KA0KICAgIGRvbSA9ICd0JywNCiAgICBzY3JvbGxYID0gVFJVRSwNCiAgICBmaXhlZENvbHVtbnMgPSBUUlVFDQogICkpDQpgYGANCjo6Og0KDQo8IS0tIDIwMjAtMSAtLT4NCg0KOjo6IHBhbmVsDQpbMjAyMC0xXXsucGFuZWwtbmFtZX0NCg0KQWPDoSBzZSBwdWVkZSBlc2NyaWJpcjoNCg0KYGBge3IsIGVjaG89RkFMU0V9DQoNCiMgTGVlciBlbCBhcmNoaXZvIDIwMjAtMQ0KZGF0YTIwMjBfMSA8LSByZWFkX2V4Y2VsKCJQbGFudGlsbGEgTm90YXMgRmluYWxlcy54bHN4Iiwgc2hlZXQgPSAxKQ0KZGF0YXRhYmxlKA0KICBoZWFkKGRhdGEyMDIwXzEsNCksIGV4dGVuc2lvbnMgPSAnRml4ZWRDb2x1bW5zJywNCiAgb3B0aW9ucyA9IGxpc3QoDQogICAgZG9tID0gJ3QnLA0KICAgIHNjcm9sbFggPSBUUlVFLA0KICAgIGZpeGVkQ29sdW1ucyA9IFRSVUUNCiAgKSkNCmBgYA0KOjo6DQoNCjwhLS0gMjAyMC0yIC0tPg0KDQo6OjogcGFuZWwNClsyMDIwLTJdey5wYW5lbC1uYW1lfQ0KDQpgYGB7ciwgZWNobz1GQUxTRX0NCg0KIyBMZWVyIGVsIGFyY2hpdm8gMjAyMC0yDQpkYXRhMjAyMF8yIDwtIHJlYWRfZXhjZWwoIlBsYW50aWxsYSBOb3RhcyBGaW5hbGVzLnhsc3giLCBzaGVldCA9IDIpDQpkYXRhdGFibGUoDQogIGhlYWQoZGF0YTIwMjBfMiw0KSwgZXh0ZW5zaW9ucyA9ICdGaXhlZENvbHVtbnMnLA0KICBvcHRpb25zID0gbGlzdCgNCiAgICBkb20gPSAndCcsDQogICAgc2Nyb2xsWCA9IFRSVUUsDQogICAgZml4ZWRDb2x1bW5zID0gVFJVRQ0KICApKQ0KYGBgDQo6OjoNCg0KPCEtLSAyMDIxLTEgLS0+DQoNCjo6OiBwYW5lbA0KWzIwMjEtMV17LnBhbmVsLW5hbWV9DQoNCmBgYHtyLCBlY2hvPUZBTFNFfQ0KDQojIExlZXIgZWwgYXJjaGl2byAyMDIxLTENCmRhdGEyMDIxXzEgPC0gcmVhZF9leGNlbCgiUGxhbnRpbGxhIE5vdGFzIEZpbmFsZXMueGxzeCIsIHNoZWV0ID0gMykNCmRhdGF0YWJsZSgNCiAgaGVhZChkYXRhMjAyMV8xLDQpLCBleHRlbnNpb25zID0gJ0ZpeGVkQ29sdW1ucycsDQogIG9wdGlvbnMgPSBsaXN0KA0KICAgIGRvbSA9ICd0JywNCiAgICBzY3JvbGxYID0gVFJVRSwNCiAgICBmaXhlZENvbHVtbnMgPSBUUlVFDQogICkpDQpgYGANCjo6Og0KDQo8IS0tIDIwMjEtMiAtLT4NCg0KOjo6IHBhbmVsDQpbMjAyMS0yXXsucGFuZWwtbmFtZX0NCg0KYGBge3IsIGVjaG89RkFMU0V9DQoNCiMgTGVlciBlbCBhcmNoaXZvIDIwMjEtMg0KZGF0YTIwMjFfMiA8LSByZWFkX2V4Y2VsKCJQbGFudGlsbGEgTm90YXMgRmluYWxlcy54bHN4Iiwgc2hlZXQgPSA0KQ0KZGF0YXRhYmxlKA0KICBoZWFkKGRhdGEyMDIxXzIsNCksIGV4dGVuc2lvbnMgPSAnRml4ZWRDb2x1bW5zJywNCiAgb3B0aW9ucyA9IGxpc3QoDQogICAgZG9tID0gJ3QnLA0KICAgIHNjcm9sbFggPSBUUlVFLA0KICAgIGZpeGVkQ29sdW1ucyA9IFRSVUUNCiAgKSkNCmBgYA0KOjo6DQoNCjwhLS0gMjAyMi0xIC0tPg0KDQo6OjogcGFuZWwNClsyMDIyLTFdey5wYW5lbC1uYW1lfQ0KDQpgYGB7ciwgZWNobz1GQUxTRX0NCg0KIyBMZWVyIGVsIGFyY2hpdm8gMjAyMi0xDQpkYXRhMjAyMl8xIDwtIHJlYWRfZXhjZWwoIlBsYW50aWxsYSBOb3RhcyBGaW5hbGVzIDIueGxzeCIsIHNoZWV0ID0gNSkNCmRhdGF0YWJsZSgNCiAgaGVhZChkYXRhMjAyMl8xLDQpLCBleHRlbnNpb25zID0gJ0ZpeGVkQ29sdW1ucycsDQogIG9wdGlvbnMgPSBsaXN0KA0KICAgIGRvbSA9ICd0JywNCiAgICBzY3JvbGxYID0gVFJVRSwNCiAgICBmaXhlZENvbHVtbnMgPSBUUlVFDQogICkpDQpgYGANCjo6Og0KDQo8IS0tIDIwMjItMiAtLT4NCg0KOjo6IHBhbmVsDQpbMjAyMi0yXXsucGFuZWwtbmFtZX0NCg0KYGBge3IsIGVjaG89RkFMU0V9DQoNCiMgTGVlciBlbCBhcmNoaXZvIDIwMjItMg0KZGF0YTIwMjJfMiA8LSByZWFkX2V4Y2VsKCJQbGFudGlsbGEgTm90YXMgRmluYWxlcyAyLnhsc3giLCBzaGVldCA9IDYpDQpkYXRhdGFibGUoDQogIGhlYWQoZGF0YTIwMjJfMiw0KSwgZXh0ZW5zaW9ucyA9ICdGaXhlZENvbHVtbnMnLA0KICBvcHRpb25zID0gbGlzdCgNCiAgICBkb20gPSAndCcsDQogICAgc2Nyb2xsWCA9IFRSVUUsDQogICAgZml4ZWRDb2x1bW5zID0gVFJVRQ0KICApKQ0KYGBgDQo6OjoNCjo6Og0KDQpQYXJhIHJlYWxpemFyIGVsIGFuw6FsaXNpcyBkZXNjcmlwdGl2bywgc2UgbW9kaWZpY8OzIGxhIGJhc2UgZGUgZGF0b3MgZGUgbGEgc2lndWllbnRlIG1hbmVyYToNCg0KLSAgIFNlIGVzY29naWVyb24gc29sbyBlc3R1ZGlhbnRlcyBkZSBwcmltZXIgYcOxbyBkZSAyMDIwIHkgMjAyMS4NCg0KLSAgIEZ1ZXJvbiBzZWxlY2Npb25hZGFzIGxhcyBhc2lnbmF0dXJhcyBkZSBGSVMxMDAsIEZJUzExMCwgTUFUMDIxLCBNQVQwMjIsIElXSTEzMSwgUVVJMDEwIHkgSVdHMTAxLg0KDQotICAgU2UgZmlsdHLDsyBwb3IgZXN0dWRpYW5lcyBxdWUgdHV2aWVyYW4gc3UgKipFU1RBRE8gTk9UQSoqIGNvbW8gYXByb2JhZGEgbyByZXByb2JhZGEuDQoNCi0gICBTZSBlbGltYXJvbiBjb2x1bW5hcyBxdWUgbm8gZnVlcmFuIGRlIGludGVyw6lzIHkgZnVlIHJlc3VtaWRhIGxhIGluZm9ybWFjacOzbiBkZSBjYWRhIGVzdHVkaWFudGUgZW4gdW5hIHNvbGEgb2JzZXJ2YWNpw7NuLg0KDQpMYSBiYXNlIGRlIGRhdG9zIG1vZGlmaWNhZGEgc2UgcHJlc2VudGEgYSBjb250aW51YWNpw7NuDQoNCjo6OiBwYW5lbHNldA0KPCEtLSAyMDE3LTEgTGltcGlvIC0tPg0KDQo6OjogcGFuZWwNClsyMDE3LTFdey5wYW5lbC1uYW1lfQ0KDQpgYGB7ciwgZWNobz1GQUxTRX0NCg0KZGYyMDE3XzEgPC0gcmVhZF9leGNlbCgiMjAxNy0xLnhsc3giKQ0KZGF0YXRhYmxlKGhlYWQoZGYyMDE3XzEsNCksIGV4dGVuc2lvbnMgPSAnRml4ZWRDb2x1bW5zJywNCiAgICAgICAgICBvcHRpb25zID0gbGlzdChkb20gPSAndCcsIHNjcm9sbFggPSBUUlVFLCBmaXhlZENvbHVtbnMgPSBUUlVFKSkNCg0KYGBgDQo6OjoNCg0KPCEtLSAyMDE3LTIgTGltcGlvIC0tPg0KDQo6OjogcGFuZWwNClsyMDE3LTJdey5wYW5lbC1uYW1lfQ0KDQpgYGB7ciwgZWNobz1GQUxTRX0NCg0KZGYyMDE3XzIgPC0gcmVhZF9leGNlbCgiMjAxNy0yLnhsc3giKQ0KZGF0YXRhYmxlKGhlYWQoZGYyMDE3XzIsNCksIGV4dGVuc2lvbnMgPSAnRml4ZWRDb2x1bW5zJywNCiAgICAgICAgICBvcHRpb25zID0gbGlzdChkb20gPSAndCcsIHNjcm9sbFggPSBUUlVFLCBmaXhlZENvbHVtbnMgPSBUUlVFKSkNCg0KYGBgDQo6OjoNCg0KPCEtLSAyMDE4LTEgTGltcGlvIC0tPg0KDQo6OjogcGFuZWwNClsyMDE4LTFdey5wYW5lbC1uYW1lfQ0KDQpgYGB7ciwgZWNobz1GQUxTRX0NCg0KZGYyMDE4XzEgPC0gcmVhZF9leGNlbCgiMjAxOC0xLnhsc3giKQ0KZGF0YXRhYmxlKGhlYWQoZGYyMDE4XzEsNCksIGV4dGVuc2lvbnMgPSAnRml4ZWRDb2x1bW5zJywNCiAgICAgICAgICBvcHRpb25zID0gbGlzdChkb20gPSAndCcsIHNjcm9sbFggPSBUUlVFLCBmaXhlZENvbHVtbnMgPSBUUlVFKSkNCg0KYGBgDQo6OjoNCg0KPCEtLSAyMDE4LTIgTGltcGlvIC0tPg0KDQo6OjogcGFuZWwNClsyMDE4LTJdey5wYW5lbC1uYW1lfQ0KDQpgYGB7ciwgZWNobz1GQUxTRX0NCg0KZGYyMDE4XzIgPC0gcmVhZF9leGNlbCgiMjAxOC0yLnhsc3giKQ0KZGF0YXRhYmxlKGhlYWQoZGYyMDE4XzIsNCksIGV4dGVuc2lvbnMgPSAnRml4ZWRDb2x1bW5zJywNCiAgICAgICAgICBvcHRpb25zID0gbGlzdChkb20gPSAndCcsIHNjcm9sbFggPSBUUlVFLCBmaXhlZENvbHVtbnMgPSBUUlVFKSkNCg0KYGBgDQo6OjoNCg0KPCEtLSAyMDIwLTEgTGltcGlvIC0tPg0KDQo6OjogcGFuZWwNClsyMDIwLTFdey5wYW5lbC1uYW1lfQ0KDQpgYGB7ciwgZWNobz1GQUxTRX0NCg0KZGYyMDIwXzEgPC0gcmVhZF9leGNlbCgiMjAyMC0xLnhsc3giKQ0KZGF0YXRhYmxlKGhlYWQoZGYyMDIwXzEsNCksIGV4dGVuc2lvbnMgPSAnRml4ZWRDb2x1bW5zJywNCiAgICAgICAgICBvcHRpb25zID0gbGlzdChkb20gPSAndCcsIHNjcm9sbFggPSBUUlVFLCBmaXhlZENvbHVtbnMgPSBUUlVFKSkNCg0KYGBgDQo6OjoNCg0KPCEtLSAyMDIwLTIgTGltcGlvIC0tPg0KDQo6OjogcGFuZWwNClsyMDIwLTJdey5wYW5lbC1uYW1lfQ0KDQpgYGB7ciwgZWNobz1GQUxTRX0NCg0KZGYyMDIwXzIgPC0gcmVhZF9leGNlbCgiMjAyMC0yLnhsc3giKQ0KZGF0YXRhYmxlKGhlYWQoZGYyMDIwXzIsNCksIGV4dGVuc2lvbnMgPSAnRml4ZWRDb2x1bW5zJywNCiAgICAgICAgICBvcHRpb25zID0gbGlzdChkb20gPSAndCcsIHNjcm9sbFggPSBUUlVFLCBmaXhlZENvbHVtbnMgPSBUUlVFKSkNCg0KYGBgDQo6OjoNCg0KPCEtLSAyMDIxLTEgTGltcGlvIC0tPg0KDQo6OjogcGFuZWwNClsyMDIxLTFdey5wYW5lbC1uYW1lfQ0KDQpgYGB7ciwgZWNobz1GQUxTRX0NCg0KZGYyMDIxXzEgPC0gcmVhZF9leGNlbCgiMjAyMS0xLnhsc3giKQ0KZGF0YXRhYmxlKGhlYWQoZGYyMDIxXzEsNCksIGV4dGVuc2lvbnMgPSAnRml4ZWRDb2x1bW5zJywNCiAgICAgICAgICBvcHRpb25zID0gbGlzdChkb20gPSAndCcsIHNjcm9sbFggPSBUUlVFLCBmaXhlZENvbHVtbnMgPSBUUlVFKSkNCg0KYGBgDQo6OjoNCg0KPCEtLSAyMDIxLTIgTGltcGlvIC0tPg0KDQo6OjogcGFuZWwNClsyMDIxLTJdey5wYW5lbC1uYW1lfQ0KDQpgYGB7ciwgZWNobz1GQUxTRX0NCg0KZGYyMDIxXzIgPC0gcmVhZF9leGNlbCgiMjAyMS0yLnhsc3giKQ0KZGF0YXRhYmxlKGhlYWQoZGYyMDIxXzIsNCksIGV4dGVuc2lvbnMgPSAnRml4ZWRDb2x1bW5zJywNCiAgICAgICAgICBvcHRpb25zID0gbGlzdChkb20gPSAndCcsIHNjcm9sbFggPSBUUlVFLCBmaXhlZENvbHVtbnMgPSBUUlVFKSkNCg0KYGBgDQo6OjoNCg0KPCEtLSAyMDIyLTEgTGltcGlvIC0tPg0KDQo6OjogcGFuZWwNClsyMDIyLTFdey5wYW5lbC1uYW1lfQ0KDQpgYGB7ciwgZWNobz1GQUxTRX0NCg0KZGYyMDIyXzEgPC0gcmVhZF9leGNlbCgiMjAyMi0xLnhsc3giKQ0KZGF0YXRhYmxlKGhlYWQoZGYyMDIyXzEsNCksIGV4dGVuc2lvbnMgPSAnRml4ZWRDb2x1bW5zJywNCiAgICAgICAgICBvcHRpb25zID0gbGlzdChkb20gPSAndCcsIHNjcm9sbFggPSBUUlVFLCBmaXhlZENvbHVtbnMgPSBUUlVFKSkNCg0KYGBgDQo6OjoNCg0KPCEtLSAyMDIyLTIgTGltcGlvIC0tPg0KDQo6OjogcGFuZWwNClsyMDIyLTJdey5wYW5lbC1uYW1lfQ0KDQpgYGB7ciwgZWNobz1GQUxTRX0NCg0KZGYyMDIyXzIgPC0gcmVhZF9leGNlbCgiMjAyMi0yLnhsc3giKQ0KZGF0YXRhYmxlKGhlYWQoZGYyMDIyXzIsNCksIGV4dGVuc2lvbnMgPSAnRml4ZWRDb2x1bW5zJywNCiAgICAgICAgICBvcHRpb25zID0gbGlzdChkb20gPSAndCcsIHNjcm9sbFggPSBUUlVFLCBmaXhlZENvbHVtbnMgPSBUUlVFKSkNCg0KYGBgDQo6OjoNCjo6Og0KDQpFbCBuw7ptZXJvIGRlIGVzdHVkaWFudGVzIHByb3ZlbmllbnRlcyBkZSBjYWRhIHJlZ2nDs24gc2UgcHJlc2VudGEgZW4gbGFzIHNpZ3VpZW50ZXMgZmlndXJhcw0KDQo6OjogcGFuZWxzZXQNCjwhLS0gMjAxNyAtLT4NCg0KOjo6IHBhbmVsDQpbMjAxN117LnBhbmVsLW5hbWV9DQoNCiFbXSgyMDE3JTIwdG90YWwucG5nKQ0KOjo6DQoNCjwhLS0gMjAxOCAtLT4NCg0KOjo6IHBhbmVsDQpbMjAxOF17LnBhbmVsLW5hbWV9DQoNCiFbXSgyMDE4JTIwdG90YWwucG5nKQ0KOjo6DQoNCjwhLS0gMjAyMCAtLT4NCg0KOjo6IHBhbmVsDQpbMjAyMF17LnBhbmVsLW5hbWV9DQoNCiFbXSgyMDIwJTIwdG90YWwucG5nKQ0KOjo6DQoNCjwhLS0gMjAyMSAtLT4NCg0KOjo6IHBhbmVsDQpbMjAyMV17LnBhbmVsLW5hbWV9DQoNCiFbXSgyMDIxJTIwdG90YWwucG5nKQ0KOjo6DQoNCjwhLS0gMjAyMiAtLT4NCg0KOjo6IHBhbmVsDQpbMjAyMl17LnBhbmVsLW5hbWV9DQoNCiFbXSgyMDIyJTIwdG90YWwucG5nKQ0KOjo6DQo6OjoNCg0KUG9kZW1vcyBvYnNlcnZhciBxdWUgZW4gYW1ib3MgYcOxb3MgbGEgbWF5b3LDrWEgZGUgZXN0dWRpYW50ZXMgcHJvdmllbmUgZGUgbGEgcmVnacOzbiBkZSBWYWxwYXJhw61zbyB5IE1ldHJvcG9saXRhbmEsIG1pZW50cmFzIHF1ZSBsYSByZWdpw7NuIGRlIEF5c8OpbiBwb3NlZSBsYSBtZW5vciB0YXNhIGRlIGluZ3Jlc28uIEFob3JhIGJpZW4sIGNvbnRpbnVhbmRvIGNvbiBlbCBhbsOhbGlzaXMsIGxvcyBzaWd1aWVudGVzIERvbnV0IFBsb3Qgbm9zIHBlcm1pdGVuIHZpc3VhbGl6YXIgbGEgdGFzYSBkZSBhcHJvYmFjacOzbiBwb3Igc2VtZXN0cmUgZGUgbG9zIHJhbW9zIGNsw6FzaWNvcyBkZSBwcmltZXIgYcOxbyBhY2Fkw6ltaWNvLg0KDQo6OjogcGFuZWxzZXQNCjwhLS0gMjAyMC0xIC0tPg0KDQo6OjogcGFuZWwNClsyMDIwLTFdey5wYW5lbC1uYW1lfQ0KDQohW10oMjAyMC0xJTIwZG9udXQucG5nKQ0KOjo6DQoNCjwhLS0gMjAyMC0yIC0tPg0KDQo6OjogcGFuZWwNClsyMDIwLTJdey5wYW5lbC1uYW1lfQ0KDQohW10oMjAyMC0yJTIwZG9udXQucG5nKQ0KOjo6DQoNCjwhLS0gMjAyMS0xIC0tPg0KDQo6OjogcGFuZWwNClsyMDIxLTFdey5wYW5lbC1uYW1lfQ0KDQohW10oMjAyMS0xJTIwZG9udXQucG5nKQ0KOjo6DQoNCjwhLS0gMjAyMS0yIC0tPg0KDQo6OjogcGFuZWwNClsyMDIxLTJdey5wYW5lbC1uYW1lfQ0KDQohW10oMjAyMS0yJTIwZG9udXQucG5nKQ0KOjo6DQo6OjoNCg0KRW4gYmFzZSBhIGxvcyBncsOhZmljb3MgYW50ZXJpb3JlcyBwb2RlbW9zIHJlc2NhdGFyIGxhcyBzaWd1aWVudGVzIGNvbmNsdXNpb25lczoNCg0KLSAgIExhIHRhc2EgZGUgcmVwcm9iYWNpw7NuIGR1cmFudGUgbG9zIHByaW1lcm9zIHNlbWVzdHJlcyBlbiB0b2RvcyBsb3MgcmFtb3MgZXMgYmFqYS4NCg0KLSAgIER1cmFudGUgZWwgYcOxbyAyMDIwIHNlIG9idHV2aWVyb24sIGVuIGdlbmVyYWwsIG1lam9yZXMgcmVuZGltaWVudG9zIHF1ZSBlbCAyMDIxLg0KDQotICAgRklTMTEwLCBNQVQwMjIgeSBRVUkwMTAgc2UgYWRqdWRpY2Fyb24gbGEgIm1heW9yIiB0YXNhIGRlIHJlcHJvYmFjacOzbi4NCg0KLSAgIElXRzEwMSBmdWUgbGEgYXNpZ25hdHVyYSBjb24gbWVqb3IgcmVuZGltaWVudG8gZHVyYW50ZSBsb3MgcGVyaW9kb3MgYW5hbGl6YWRvcy4NCg0KLSAgIExvcyBzZW1lc3RyZXMgcGFyZXMgdHV2aWVyb24gYWx0YXMgdGFzYXMgZGUgcmVwcm9iYWNpw7NuIGVuIGFzaWduYXR1cmFzIHByb3BpYXMgZGUgcHJpbWVyIHNlbWVzdHJlIHNlZ8O6biBtYWxsYSBhY2Fkw6ltaWNhLg0KDQpFbnNlZ3VpZGEsIHVuYSBwcmVndW50YSBpbnRlcmVzYW50ZSBhIHJlc3BvbmRlciBlczogKirCv0PDs21vIHNlIHZpc3VhbGl6YW4gbGFzIG5vdGFzIGFudGVyaW9yZXMgZ2VvZ3JhZmljYW1lbnRlPyoqIFBhcmEgZWxsbyB1dGlsaXphbW9zIGVsIG1hcGEgZGUgQ2hpbGUgZXh0cmHDrWRvIGRlIEBnYWRtIHNlY2Npb25hZG8gcG9yIHJlZ2lvbmVzLiBMdWVnbywgc2Ugb2J0aWVuZW4gbGFzIHNpZ3VpZW50ZXMgZmlndXJhcw0KDQo6OjogcGFuZWxzZXQNCjwhLS0gMjAyMC0xIC0tPg0KDQo6OjogcGFuZWwNClsyMDIwLTFdey5wYW5lbC1uYW1lfQ0KDQohW10obWFwYXMlMjAyMDIwLTEucG5nKQ0KOjo6DQoNCjwhLS0gMjAyMC0yIC0tPg0KDQo6OjogcGFuZWwNClsyMDIwLTJdey5wYW5lbC1uYW1lfQ0KDQohW10obWFwYXMlMjAyMDIwLTIucG5nKQ0KOjo6DQoNCjwhLS0gMjAyMS0xIC0tPg0KDQo6OjogcGFuZWwNClsyMDIxLTFdey5wYW5lbC1uYW1lfQ0KDQohW10obWFwYXMlMjAyMDIxLTEucG5nKQ0KOjo6DQoNCjwhLS0gMjAyMS0yIC0tPg0KDQo6OjogcGFuZWwNClsyMDIxLTJdey5wYW5lbC1uYW1lfQ0KDQohW10obWFwYXMlMjAyMDIxLTIucG5nKQ0KOjo6DQo6OjoNCg0KRGUgbG8gYW50ZXJpb3IsIHBvZGVtb3MgZGVzcHJlbmRlciBjb25jbHVzaW9uZXMgcXVlIGFudGVzIG5vIHBvc2XDrWFtb3M6DQoNCi0gICBMYSBncmFuIG1heW9yw61hIGRlIHJlZ2lvbmVzIGFwcm9iw7MgY29uIG5vdGFzIHN1cGVyaW9yZXMgYSA3MCBlbiBwcm9tZWRpby4NCg0KLSAgIExhIHpvbmEgbm9ydGUgZGUgQ2hpbGUgb2J0dXZvIGxvcyByZW5kaW1pZW50b3MsIGVuIHByb21lZGlvLCBtw6FzIGRlc2NlbmRpZG9zLg0KDQotICAgTGFzIHJlZ2lvbmVzIHByb3ZlbmllbnRlcyBkZSBsYSB6b25hIHN1ciBkZSBDaGlsZSBvYnR1dmllcm9uIGxvcyByZW5kaW1pZW50b3MgbcOhcyBhbHRvcy4NCg0KLSAgIExhIGFzaWduYXR1cmEgcXVlLCBlbiBwcm9tZWRpbywgdHV2byBsb3MgcmVuZGltaWVudG9zIG3DoXMgYmFqb3MgZnVlcm9uIFFVSTAxMCB5IEZJUzExMC4NCg0KIyMgQXV0b2NvcnJlbGFjacOzbiBlc3BhY2lhbDogw41uZGljZSBkZSBNb3Jhbg0KDQpEYWRhcyBsYXMgb2JzZXJ2YWNpb25lcyAkWV8xLFxsZG90cyxZX24kIGFzb2NpYWRhcyBhIHVuYSBzZWN1ZW5jaWEgZXNwYWNpYWwgLCBAbW9yYW4xOTUwbm90ZXMgcHJvcHVzbyBlbCBzaWd1aWVudGUgZXN0YWTDrXN0aWNvIHBhcmEgbWVkaXIgbGEgcHJlc2VuY2lhIGRlIGF1dG9jb3JyZWxhY2nDs24gZGUgdW5hIHNlY3VlbmNpYSBlc3BhY2lhbA0KDQokJEk9XGZyYWN7biBcc3VtX2kgXHN1bV9qIHdfe2kgan1cbGVmdChZX2ktXGJhcntZfVxyaWdodClcbGVmdChZX2otXGJhcntZfVxyaWdodCl9e1xsZWZ0KFxzdW1fe2kgXG5lcSBqfSB3X3tpIGp9XHJpZ2h0KSBcc3VtX2lcbGVmdChZX2ktXGJhcntZfVxyaWdodCleMn0kJCBkb25kZSAkd197aWp9JCBzb24gcGVzb3MgZXNwYWNpYWxlcyBlbnRyZSBsb3Mgc2l0aW9zIHkgJFxiYXJ7WX0kIGRlbm90YSBlbCBwcm9tZWRpbyBkZSBsYXMgb2JzZXJ2YWNpb25lcy4gQmFqbyBub3JtYWxpZGFkIHkgYXN1bWllbmRvIG1lZGlhIGNvbnN0YW50ZSBkZWwgcHJvY2Vzbywgc2UgdGllbmUgcXVlICRcbWF0aGJie0V9W0ldPS1cZnJhY3sxfXtuLTF9JC4gRW4gbGEgcHLDoWN0aWNhLCBzZSBjb25zaWRlcmEgcXVlDQoNCi0gICBTaSAkST5cbWF0aGJie0V9W0ldJCwgZW50b25jZXMgdW4gc2l0aW8gdGllbmRlIGEgY29uZWN0YXJzZSBhIGxvcyBzaXRpb3MgcXVlIHRpZW5lIHNpbWlsYXJlcyBhdHJpYnV0b3MuIExhIGNvcnJlbGFjacOzbiBlc3BhY2lhbCBlcyBwb3NpdGl2YSB5IGF1bWVudGEgYSBtZWRpZGEgcXVlIGVsIHZhbG9yICR8SS1cbWF0aGJie0V9W0ldfCQgbG8gaGFjZS4NCg0KLSAgIFNpICRJPFxtYXRoYmJ7RX1bSV0kLCBsb3MgdmFsb3JlcyBkZSBzaXRpb3MgY29uZWN0YWRvcyBhIHVuIHNpdGlvIGVuIHBhcnRpY3VsYXIgdGllbmRlbiBhIHNlciBkaXNpbWlsZXMgbyBkaWZlcmVudGVzLg0KDQojIyBNb2RlbG9zIENBUiB1bml2YXJpYWRvcyB5IG11bHRpdmFyaWFkb3MNCg0KVW4gbW9kZWxvIENBUiAoQ29uZGl0aW9uYWwgQXV0b3JlZ3Jlc3NpdmUpIGVzIHVuIHRpcG8gZGUgbW9kZWxvIGVzdGFkw61zdGljbyB1dGlsaXphZG8gcGFyYSBhbmFsaXphciBkYXRvcyBlc3BhY2lhbGVzLiBTZSB1c2EgZnJlY3VlbnRlbWVudGUgcGFyYSBtb2RlbGFyIGxhIHJlbGFjacOzbiBlbnRyZSBsYXMgb2JzZXJ2YWNpb25lcyBkZSB1bmEgdmFyaWFibGUgZW4gZGlmZXJlbnRlcyBsdWdhcmVzIGdlb2dyw6FmaWNvcy4gRWwgbW9kZWxvIGFzdW1lIHF1ZSBsYSB2YXJpYWJsZSBlbiBjYWRhIHB1bnRvIGVzdMOhIHJlbGFjaW9uYWRhIGNvbiBsYXMgdmFyaWFibGVzIGVuIGxvcyBwdW50b3MgdmVjaW5vcywgeSBzZSB1dGlsaXphIHBhcmEgZ2VuZXJhciBwcmVkaWNjaW9uZXMgcGFyYSBwdW50b3Mgc2luIGRhdG9zLiBBIHBlc2FyIGRlIHF1ZSBoYXlhbiBzaWRvIGludHJvZHVjaWRvcyBoYWNlIGTDqWNhZGFzIGF0cmFzIHBvciBAYmVzYWcxOTc0c3BhdGlhbC4gSGFuIHRvbWFkbyBtYXlvciByZWxldmFuY2lhIHBvciBzdSBhcGxpY2FjacOzbiBlbiB0ZW1hcyBpbmdlbmllcmlsZXMgeSBtw6lkaWNvcy4NCg0KUGFyYSBlbCBjYXNvIEdhdXNzaWFubywgZGFkYXMgbGFzIGNvbXBvbmVudGVzIGVzcGFjaWFsICRce1xtYXRoYmZ7c31faVx9X3tpPTF9Xm4kLCBhc29jaWFtb3MgdW4gZWZlY3RvIGVzcGFjaWFsIGxhdGVudGUgJFx7XHBoaShcbWF0aGJme3N9X2kpXH1fe2k9MX1ebiQuIEVsIG1vZGVsbyBDQVIgc2UgZm9ybXVsYSBhIHBhcnRpciBkZSBzdXMgZGlzdHJpYnVjaW9uZXMgZnVsbCBjb25kaWNpb25hZGFzIGNvbW8NCg0KJCRccGhpX2kgXG1pZCBccGhpX2osIGogXG5lcSBpIFxzaW0gTlxsZWZ0KFxzdW1fe2o9MX1ee259IGNfe2lqfXlfaiwgXHNpZ21hX2leMlxyaWdodCkuJCQgZG9uZGUgJFxzaWdtYV9pJCBlcyB1biBwYXLDoW1ldHJvIGRlIGNvdmFyaWFuemEgZXNwYWNpYWwgeSAkXG1hdGhiZntDfT1ce2Nfe2lqfVx9JCBlcyB1bmEgbWF0cml6ICRuXHRpbWVzIG4kIGFzb2NpYWRhIGNvbiBsYXMgY29tcG9uZW50ZXMgZXNwYWNpYWxlcy4NCg0KU2kgZGVmaW5pbW9zICRcbWF0aGJme019PVx0ZXh0e2RpYWd9KFxzaWdtYV8xXjIsXGxkb3RzLFxzaWdtYV9uXjIpJC4gQmFqbyBsYSBjb25kaWNpw7NuIGRlIHNpbWV0csOtYSBkZSAkXG1hdGhiZntNfV57LTF9XG1hdGhiZntDfSQgeSBxdWUgJFxtYXRoYmZ7TX1eey0xfShcbWF0aGJme0l9X24tXG1hdGhiZntDfSkkIHNlYSBkZWZpbmlkYSBwb3NpdGl2YSBbQGNyZXNzaWUxOTkzc3RhdGlzdGljc10sIGxhIGRpc3RyaWJ1Y2nDs24gY29uanVudGEgZGUgJFxib2xkc3ltYm9se1xwaGl9JCBlc3TDoSBiaWVuIGRlZmluaWRhIGNvbW8NCg0KJCRcYm9sZHN5bWJvbHtccGhpfVxzaW0gTihcbWF0aGJmezB9LFxtYXRoYmZ7XFNpZ21hfV97XHRleHR7Q0FSfX0pJCQgZG9uZGUgJFxtYXRoYmZ7XFNpZ21hfV97XHRleHR7Q0FSfX09KFxtYXRoYmZ7SX1fbi1cbWF0aGJme0N9KV57LTF9XG1hdGhiZntNfSQuDQoNClVzdWFsbWVudGUsIGVzIGNvbnNpZGVyYWRvIHF1ZSAkXG1hdGhiZntDfT1ccmhvXG1hdGhiZntXfSQgeSAkXG1hdGhiZntNfT1cc2lnbWFeMlxtYXRoYmZ7SX1fbiQsIGRvbmRlICRcYm9sZHN5bWJvbHtXfSQgZXMgdW5hIG1hdHJpeiBkZSBwZXNvcyBlc3BhY2lhbGVzLCAkXHJobyQgZXMgdW4gcGFyw6FtZXRybyBkZSBzdWF2aXphbWllbnRvIHkgJFxtYXRoYmZ7XFNpZ21hfV97XHRleHR7Q0FSfX09XHNpZ21hXjJcbGVmdChcbWF0aGJme0l9X24tXHJobyBcbWF0aGJme1d9XHJpZ2h0KV57LTF9JCBzaSAkXG1hdGhiZntXfSQgZXMgc2ltw6l0cmljYS4gTcOhcyBhw7puLCBzaSAkXG1hdGhiZntXfSQgZXMgYWRlbcOhcyBlc3RhbmRhcml6YSBwb3IgZmlsYSwgJFxtYXRoYmZ7XFNpZ21hfV97XHRleHR7Q0FSfX09XHNpZ21hXjIoXG1hdGhiZntEfS1ccmhvIFxtYXRoYmZ7V30pXnstMX0kLCBkb25kZSAkXG1hdGhiZntEfT1cdGV4dHtkaWFnfShcbWF0aGJme1d9X3sxK30sXGxkb3RzLFxtYXRoYmZ7V31fe24rfSkkIHkgJFxtYXRoYmZ7V31fe2krfSQgZXMgbGEgc3VtYSBkZSBsb3MgZWxlbWVudG9zIGRlIGxhICRpJC3DqXNpbWEgZmlsYSBkZSBsYSBtYXRyaXogJFxtYXRoYmZ7V30kIHBhcmEgY2FkYSAkaT0xLFxsZG90cyxuJC4NCg0KQGJhbmVyamVlMjAwM2hpZXJhcmNoaWNhbCBleHRlbmRpZXJvbiBlbCBtb2RlbG8gYW50ZXJpb3IgYSB1bm8gZnVsbCBjb25kaWNpb25hZG8gY29uc2lkZXJhbmRvICRcYm9sZHN5bWJvbHtccGhpfV57XHRvcH09KFxib2xkc3ltYm9se1xwaGl9XzEsXGxkb3RzLFxib2xkc3ltYm9se1xwaGl9X24pJCwgZG9uZGUgY2FkYSAkXGJvbGRzeW1ib2x7XHBoaX1faT0oXHBoaV97aTF9LFxsZG90cyxccGhpX3tpcH0pXntcdG9wfVxpblxtYXRoYmJ7Un1ee3B9JC4gQXPDrSwgbGEgZGlzdHJpYnVjacOzbiBjb25qdW50YSBlc3TDoSBkZWZpbmlkYSBjb21vDQoNCiQkXGJvbGRzeW1ib2x7XHBoaX1cc2ltIE4oXG1hdGhiZnswfSxcbWF0aGJme1xTaWdtYX1fe1x0ZXh0e01DQVJ9fSkkJCBkb25kZSAkXG1hdGhiZntcU2lnbWF9X3tcdGV4dHtNQ0FSfX09XExhbWJkYVxvdGltZXMoXG1hdGhiZntEfS1ccmhvXG1hdGhiZntXfSleey0xfSQgeSAkXExhbWJkYSQgZXMgdW5hIG1hdHJpeiBkZSBjb3ZhcmlhbnphIGRlZmluaWRhIHBvc2l0aXZhIHF1ZSBhanVzdGEgbGEgY29ycmVsYWNpw7NuIG5vIGVzcGFjaWFsIGVudHJlIHZhcmlhYmxlcyBlbiBjdWFscXVpZXIgcmVnacOzbiAkXG1hdGhiZntzfV9pJCwgcGFyYSAkaT0xLFxsZG90cyxuJC4NCg0KRGl2ZXJzYXMgdmFyaWFjaW9uZXMgaGEgdGVuaWRvIGVsIG1vZGVsby4gQExlcm91eDIwMDBFc3RpbWF0aW9uT0QgcHJvcHVzaWVyb24gdW5hIGRpc3RyaWJ1Y2nDs24gY29uanVudGEgKGJham8gbG9zIHN1cHVlc3RvcyBhZGVjdWFkb3MpIGRlIGxvcyBlZmVjdG9zIGVzcGFjaWFsZXMgZGFkYSBwb3IgJCRcYm9sZHN5bWJvbHtccGhpfSBcc2ltIFxtYXRocm17Tn1cbGVmdChcbWF0aGJmezB9LFxsZWZ0W1xtYXRoYmZ7UX0oXG1hdGhiZntXfSwgXHJobykgXG90aW1lcyBcbWF0aGJme1xTaWdtYX1eey0xfVxyaWdodF1eey0xfVxyaWdodCkkJCBBcXXDrSAkXG1hdGhiZntRfShcbWF0aGJme1d9LCBccmhvKT1ccmhvW1xvcGVyYXRvcm5hbWV7ZGlhZ30oXG1hdGhiZntXfSBcbWF0aGJmezF9KS1cbWF0aGJme1d9XSsoMS1ccmhvKSBcbWF0aGJme0l9JCBlcyBsYSBtYXRyaXogZGUgcHJlY2lzacOzbiwgbWllbnRyYXMgcXVlICRcbWF0aGJme1xTaWdtYX0kIGVzIHVuYSBtYXRyaXogZGUgY292YXJpYW56YSBjcnV6YWRhIGVudHJlIGxhcyB2YXJpYWJsZXMuDQoNCiMjIEltcGxlbWVudGFjacOzbg0KDQpQYXJhIGxhIGFwbGljYWNpw7NuIHNlIHV0aWxpesOzICRcdGV4dHR0e1J9JCBzaWd1aWVuZG8gbG9zIGxpbmVhbWllbnRvcyBwcmVzZW50ZXMgZW4gQGJhbmVyamVlMjAwM2hpZXJhcmNoaWNhbC4gRWwgw61uZGljZSBkZSBNb3LDoW4gc2UgZW5jdWVudHJhIGVuIGxhIGxpYnJlcsOtYSAkXHRleHR0dHtzcGRlcH0kIHkgbGEgaW1wbGVtZW50YWNpw7NuIGRlbCBtb2RlbG8gTUNBUiBzZXLDoSBhIHRyYXbDqXMgZGUgdW4gbWFyY28gYmF5ZXNpYW5vIGRlYmlkbyBhIGxhIGVzdHJ1Y3R1cmEgY29uZGljaW9uYWwgZXhwbMOtY2l0YSwgY29tbyBzZcOxYWxhbiBAR2VsZmFuZDIwMDNQcm9wZXJNQy4gUGFyYSBlbGxvLCB1dGlsaXphcmVtb3MgbGEgbGlicmVyw61hICRcdGV4dHR0e0NBUkJheWVzfSQgW0BDQVJCYXllc10uIFNlIGFqdXN0w7MgdW4gbW9kZWxvIGxpbmVhbCBzdXBvbmllbmRvIHF1ZSAkWV97a2p9XHNpbSBOKFxtdV97a2p9LFxzaWdtYV9qXjIpJCB5ICRcbXVfe2tqfT1cbWF0aGJme3h9X2tee1x0b3B9XGJvbGRzeW1ib2x7XGJldGF9X2orXHBoaV97a2p9JCwgZG9uZGUgbG9zIGVmZWN0b3MgYWxlYXRvcmlvcyBlc3BhY2lhbGVzIHNpZ3VlbiBsYSBlc3RydWN0dXJhIE1DQVIgZGUgTGVyb3V4Lg0KDQojIyBBcGxpY2FjacOzbiBlbiBsYSByZWdpb24gZGUgVmFscGFyYcOtc28NCg0KRGFkYSBsYSBwb2NhIGNhbnRpZGFkIGRlIGRhdG9zIHBhcmEgcmVhbGl6YXIgdW4gYW7DoWxpc2lzIGRlIGNhcmFjdGVyIG5hY2lvbmFsLCBub3MgY2VudHJhcmVtb3MgZW4gbGEgcmVnacOzbiBkZSBWYWxwYXJhw61zbyB5IHN1cyBjb211bmFzLiBBcGxpY2FyZW1vcyBlbCBtb2RlbG8gbGluZWFsIGFudGVyaW9yIHVzYW5kbyBjb21vIHZhcmlhYmxlcyBleHBsaWNhdGl2YXM6DQoNCjEuICDDjW5kaWNlIGRlIHBvYnJlemEgW0Bwb2JyZXphaW5kZXhdIGFqdXN0YWRvIHVzYW5kbyBsYSBtZXRvZG9sb2fDrWEgZGUgw6FyZWFzIHBlcXVlw7FhcyAoU0FFLCBwb3Igc3Ugc2lnbGEgZW4gaW5nbMOpcykuIFNlIGVuY2FyZ2EgZGUgbWVkaXIgZWwgcG9yY2VudGFqZSBkZSBwZXJzb25hcyBlbiBzaXR1YWNpw7NuIGRlIHBvYnJlemEgcG9yIGluZ3Jlc29zLg0KDQoyLiAgw41uZGljZSBkZSBkZXNhcnJvbGxvIGNvbXVuYWwgW0BkZXNhcnJvbGxvaW5kZXhdIHF1ZSBvdG9yZ2EgdW4gcHVudGFqZSBhIGxhcyBjb211bmFzIGRlIENoaWxlIHF1ZSB2YXLDrWEgZW50cmUgMCB5IDEgc2Vnw7puIHN1cyBjb25kaWNpb25lcyBlY29uw7NtaWNhcywgZWR1Y2F0aXZhcyB5IGRlIHNhbHVkLg0KDQozLiAgUHVudGFqZSBQU1UgMjAxNyBwb3IgY29tdW5hcyBkZSBsYSByZWdpw7NuIHF1ZSBhbmFsaXphIGVsIHByb21lZGlvIGRlIGxhcyBwcnVlYmFzIGRlIG1hdGVtw6F0aWNhcyB5IGxlbmd1YWplIC4NCg0KNC4gIFRhc2EgZGUgY29sZWdpb3MgcGFydGljdWxhcmVzIHBvciBuw7ptZXJvIHRvdGFsIGRlIGVzdGFibGVjaW1pZW50b3MgZWR1Y2FjaW9uYWxlcywgZXN0byBmdWUgY2FsY3VsYWRvIHVzYW5kbyBkYXRvcyBvZmljaWFsZXMgZGUgbGEgYmlibGlvdGVjYSBkZWwgY29uZ3Jlc28gbmFjaW9uYWwgZGUgQ2hpbGUuDQoNCkdyYWZpY2FtZW50ZSBsbyBhbnRlcmlvciBzZSB2aXN1YWxpemEgZW4gbGEgc2lndWllbnRlIGZpZ3VyYQ0KDQo6OjogcGFuZWxzZXQNCjwhLS0gSURQIC0tPg0KDQo6OjogcGFuZWwNCltJRFBdey5wYW5lbC1uYW1lfQ0KDQpgYGB7ciwgZmlnLmFsaWduID0gImNlbnRlciIsIG1lc3NhZ2U9RkFMU0UsIHdhcm5pbmc9RkFMU0UsIGVjaG89RkFMU0V9DQoNCmluZGljZXMgPC0gcmVhZF9leGNlbCgicG9icmV6YSB2YWxwby54bHN4IikNCg0KaW5kaWNlcyRDb211bmEgPC0gdG91cHBlcihpbmRpY2VzJENvbXVuYSkNCmluZGljZXMkQ29tdW5hIDwtIGNoYXJ0cigiw6DDqMOsw7LDucOAw4jDjMOSw5nDocOpw63Ds8O6w4HDicONw5PDmiIsICJhZWlvdUFFSU9VYWVpb3VBRUlPVSIsIGluZGljZXMkQ29tdW5hKQ0KDQpjb2xuYW1lcyhpbmRpY2VzKVszXTwtICJJRFAiDQpjb2xuYW1lcyhpbmRpY2VzKVs0XTwtICJJREMiDQpjb2xuYW1lcyhpbmRpY2VzKVs1XTwtICJSQ1AiDQpjb2xuYW1lcyhpbmRpY2VzKVs2XTwtICJQUEMiDQoNCmdhZG1fdmFscF9jb20gPC0gdmVjdChyZWFkUkRTKCJnYWRtNDFfQ0hMXzNfcGsucmRzIikpICU+JQ0KICBzdF9hc19zZigpICU+JQ0KICBmaWx0ZXIoTkFNRV8xID09ICJWYWxwYXJhw61zbyIpDQoNCmdhZG1fdmFscF9jb20kTkFNRV8zIDwtIHRvdXBwZXIoZ2FkbV92YWxwX2NvbSROQU1FXzMpDQpnYWRtX3ZhbHBfY29tJE5BTUVfMyA8LSBjaGFydHIoIsOgw6jDrMOyw7nDgMOIw4zDksOZw6HDqcOtw7PDusOBw4nDjcOTw5oiLCAiYWVpb3VBRUlPVWFlaW91QUVJT1UiLCBnYWRtX3ZhbHBfY29tJE5BTUVfMykNCmdhZG1fdmFscF9jb20kTkFNRV8zIDwtIGdzdWIoIi0iLCAiICIsIGdhZG1fdmFscF9jb20kTkFNRV8zKQ0KZ2FkbV92YWxwX2NvbSA8LSBnYWRtX3ZhbHBfY29tWy1jKDEpLCBdICNRdWl0YXIgSXNsYSBkZSBQYXNjdWENCmdhZG1fdmFscF9jb20gPC0gc3Vic2V0KGdhZG1fdmFscF9jb20sIE5BTUVfMyAhPSAiSlVBTiBGRVJOQU5ERVoiKQ0KZ2FkbV92YWxwX2NvbSROQU1FXzNbMTRdIDwtICJMQSBDQUxFUkEiDQpnYWRtX3ZhbHBfY29tJE5BTUVfM1syNl0gPC0gIkxMQVkgTExBWSINCg0KY29sX2F1eCA8LSByZXAoTkEsbGVuZ3RoKGdhZG1fdmFscF9jb20kTkFNRV8zKSkNCg0KcHJvbV9jb21fdmFscCA8LSBkYXRhLmZyYW1lKGdhZG1fdmFscF9jb20kTkFNRV8zLCBjb2xfYXV4LCBjb2xfYXV4LCBjb2xfYXV4LCBjb2xfYXV4LCBjb2xfYXV4LCBjb2xfYXV4LCBjb2xfYXV4LCBjb2xfYXV4LCBjb2xfYXV4LCBjb2xfYXV4KQ0KbmFtZXMocHJvbV9jb21fdmFscCkgPC0gYygiQ29tdW5hIiwgIkZJUzEwMCIsIkZJUzExMCIsICJJV0kxMzEiLCAiTUFUMDIxIiwgIk1BVDAyMiIsIlFVSTAxMCIsDQogICAgICAgICAgICAgICAgICAgICAgICAgICJJRFAiLCAiSURDIiwgIlJDUCIsICJQUEMiKQ0KDQpmb3IgKGkgaW4gMTpsZW5ndGgoaW5kaWNlcyRDb211bmEpKXsNCiAgRklTMTAwIDwtIG1lYW4oc3Vic2V0KGRmMjAxN18xLCBDT01VTkFfT1JJR0VOID09IGluZGljZXMkQ29tdW5hW2ldKSRGSVMxMDAsIG5hLnJtID0gVFJVRSkNCiAgRklTMTEwIDwtIG1lYW4oc3Vic2V0KGRmMjAxN18xLCBDT01VTkFfT1JJR0VOID09IGluZGljZXMkQ29tdW5hW2ldKSRGSVMxMTAsIG5hLnJtID0gVFJVRSkNCiAgSVdJMTMxIDwtIG1lYW4oc3Vic2V0KGRmMjAxN18xLCBDT01VTkFfT1JJR0VOID09IGluZGljZXMkQ29tdW5hW2ldKSRJV0kxMzEsIG5hLnJtID0gVFJVRSkNCiAgTUFUMDIxIDwtIG1lYW4oc3Vic2V0KGRmMjAxN18xLCBDT01VTkFfT1JJR0VOID09IGluZGljZXMkQ29tdW5hW2ldKSRNQVQwMjEsIG5hLnJtID0gVFJVRSkNCiAgTUFUMDIyIDwtIG1lYW4oc3Vic2V0KGRmMjAxN18xLCBDT01VTkFfT1JJR0VOID09IGluZGljZXMkQ29tdW5hW2ldKSRNQVQwMjIsIG5hLnJtID0gVFJVRSkNCiAgUVVJMDEwIDwtIG1lYW4oc3Vic2V0KGRmMjAxN18xLCBDT01VTkFfT1JJR0VOID09IGluZGljZXMkQ29tdW5hW2ldKSRRVUkwMTAsIG5hLnJtID0gVFJVRSkNCiAgSURQIDwtIHN1YnNldChpbmRpY2VzLCBDb211bmEgPT0gaW5kaWNlcyRDb211bmFbaV0pJElEUA0KICBJREMgPC0gc3Vic2V0KGluZGljZXMsIENvbXVuYSA9PSBpbmRpY2VzJENvbXVuYVtpXSkkSURDDQogIFJDUCA8LSBzdWJzZXQoaW5kaWNlcywgQ29tdW5hID09IGluZGljZXMkQ29tdW5hW2ldKSRSQ1ANCiAgUFBDIDwtIHN1YnNldChpbmRpY2VzLCBDb211bmEgPT0gaW5kaWNlcyRDb211bmFbaV0pJFBQQw0KICByb3dfaW5kZXggPC0gd2hpY2gocHJvbV9jb21fdmFscCRDb211bmEgPT0gaW5kaWNlcyRDb211bmFbaV0pDQogIHByb21fY29tX3ZhbHBbcm93X2luZGV4LCAiRklTMTAwIl0gPC0gYXMubnVtZXJpYyhGSVMxMDApDQogIHByb21fY29tX3ZhbHBbcm93X2luZGV4LCAiRklTMTEwIl0gPC0gYXMubnVtZXJpYyhGSVMxMTApDQogIHByb21fY29tX3ZhbHBbcm93X2luZGV4LCAiSVdJMTMxIl0gPC0gYXMubnVtZXJpYyhJV0kxMzEpDQogIHByb21fY29tX3ZhbHBbcm93X2luZGV4LCAiTUFUMDIxIl0gPC0gYXMubnVtZXJpYyhNQVQwMjEpDQogIHByb21fY29tX3ZhbHBbcm93X2luZGV4LCAiTUFUMDIyIl0gPC0gYXMubnVtZXJpYyhNQVQwMjIpDQogIHByb21fY29tX3ZhbHBbcm93X2luZGV4LCAiUVVJMDEwIl0gPC0gYXMubnVtZXJpYyhRVUkwMTApDQogIHByb21fY29tX3ZhbHBbcm93X2luZGV4LCAiSURQIl0gPC0gYXMubnVtZXJpYyhJRFApDQogIHByb21fY29tX3ZhbHBbcm93X2luZGV4LCAiSURDIl0gPC0gYXMubnVtZXJpYyhJREMpDQogIHByb21fY29tX3ZhbHBbcm93X2luZGV4LCAiUkNQIl0gPC0gYXMubnVtZXJpYyhSQ1ApDQogIHByb21fY29tX3ZhbHBbcm93X2luZGV4LCAiUFBDIl0gPC0gYXMubnVtZXJpYyhQUEMpDQp9DQoNCnByb21fY29tX3ZhbHAgPC0gcHJvbV9jb21fdmFscCAlPiUgbXV0YXRlX2FsbCh+aWZlbHNlKGlzLm5hbiguKSwgTkEsIC4pKQ0KDQpnYWRtX3ZhbHBfY29tJEZJUzEwMCA8LSBwcm9tX2NvbV92YWxwJEZJUzEwMA0KZ2FkbV92YWxwX2NvbSRGSVMxMTAgPC0gcHJvbV9jb21fdmFscCRGSVMxMTANCmdhZG1fdmFscF9jb20kSVdJMTMxIDwtIHByb21fY29tX3ZhbHAkSVdJMTMxDQpnYWRtX3ZhbHBfY29tJE1BVDAyMSA8LSBwcm9tX2NvbV92YWxwJE1BVDAyMQ0KZ2FkbV92YWxwX2NvbSRNQVQwMjIgPC0gcHJvbV9jb21fdmFscCRNQVQwMjINCmdhZG1fdmFscF9jb20kUVVJMDEwIDwtIHByb21fY29tX3ZhbHAkUVVJMDEwDQpnYWRtX3ZhbHBfY29tJElEUCA8LSBwcm9tX2NvbV92YWxwJElEUA0KZ2FkbV92YWxwX2NvbSRJREMgPC0gcHJvbV9jb21fdmFscCRJREMNCmdhZG1fdmFscF9jb20kUkNQIDwtIHByb21fY29tX3ZhbHAkUkNQDQpnYWRtX3ZhbHBfY29tJFBQQyA8LSBwcm9tX2NvbV92YWxwJFBQQw0KDQpnYWRtX3ZhbHBfY29tIDwtIHN0X3RyYW5zZm9ybSh4PWdhZG1fdmFscF9jb20sDQogICAgICAgICAgICAgICAgY3JzPScrcHJvaj1sb25nbGF0ICtkYXR1bT1XR1M4NCArbm9fZGVmcycpDQoNCmNvbG91cnMgPC0gY29sb3JOdW1lcmljKHBhbGV0dGUgPSAiWWxPclJkIiwgZG9tYWluID0gZ2FkbV92YWxwX2NvbSRJRFApDQptYXAxIDwtIGxlYWZsZXQoZGF0YT1nYWRtX3ZhbHBfY29tKSAlPiUNCiAgICAgICAgYWRkVGlsZXMoKSAlPiUNCiAgICAgICAgYWRkUG9seWdvbnMoZmlsbENvbG9yID0gfmNvbG91cnMoSURQKSwgY29sb3I9ImdyZXkiLCB3ZWlnaHQ9MSwNCiAgICAgICAgZmlsbE9wYWNpdHkgPSAwLjcsIA0KICAgICAgICBsYWJlbCA9IH5wYXN0ZShnYWRtX3ZhbHBfY29tJE5BTUVfMywgZ2FkbV92YWxwX2NvbSRJRFApLA0KICAgICAgICBoaWdobGlnaHRPcHRpb25zID0gaGlnaGxpZ2h0T3B0aW9ucygNCiAgICAgICAgICB3ZWlnaHQgPSA1LA0KICAgICAgICAgIGNvbG9yID0gImdyZXkiLA0KICAgICAgICAgIGZpbGxPcGFjaXR5ID0gMC43LA0KICAgICAgICAgIGJyaW5nVG9Gcm9udCA9IFRSVUUpLA0KICAgICAgICBsYWJlbE9wdGlvbnMgPSBsYWJlbE9wdGlvbnMoDQogICAgICAgICAgc3R5bGUgPSBsaXN0KCJmb250LXdlaWdodCIgPSAibm9ybWFsIiwgcGFkZGluZyA9ICIzcHggOHB4IiksDQogICAgICAgICAgdGV4dHNpemUgPSAiMTVweCIsDQogICAgICAgICAgZGlyZWN0aW9uID0gImF1dG8iKSkgJT4lDQogICAgICAgIGFkZExlZ2VuZChwYWwgPSBjb2xvdXJzLCB2YWx1ZXMgPSBnYWRtX3ZhbHBfY29tJElEUCwgb3BhY2l0eSA9IDEsDQogICAgICAgIHRpdGxlPSJJRFAiKSAlPiUNCiAgICAgICAgYWRkU2NhbGVCYXIocG9zaXRpb249ImJvdHRvbWxlZnQiKQ0KbWFwMQ0KDQpgYGANCjo6Og0KDQo8IS0tIElEQyAtLT4NCg0KOjo6IHBhbmVsDQpbSURDXXsucGFuZWwtbmFtZX0NCg0KYGBge3IsIGZpZy5hbGlnbj0iY2VudGVyIiwgbWVzc2FnZT1GQUxTRSwgd2FybmluZz1GQUxTRSwgZWNobz1GQUxTRX0NCg0KY29sb3VycyA8LSBjb2xvck51bWVyaWMocGFsZXR0ZSA9ICJZbE9yUmQiLCBkb21haW4gPSBnYWRtX3ZhbHBfY29tJElEQykNCm1hcDIgPC0gbGVhZmxldChkYXRhPWdhZG1fdmFscF9jb20pICU+JQ0KICAgICAgICBhZGRUaWxlcygpICU+JQ0KICAgICAgICBhZGRQb2x5Z29ucyhmaWxsQ29sb3IgPSB+Y29sb3VycyhJREMpLCBjb2xvcj0iZ3JleSIsIHdlaWdodD0xLA0KICAgICAgICBmaWxsT3BhY2l0eSA9IDAuNywgDQogICAgICAgIGxhYmVsID0gfnBhc3RlKGdhZG1fdmFscF9jb20kTkFNRV8zLCBnYWRtX3ZhbHBfY29tJElEQyksDQogICAgICAgIGhpZ2hsaWdodE9wdGlvbnMgPSBoaWdobGlnaHRPcHRpb25zKA0KICAgICAgICAgIHdlaWdodCA9IDUsDQogICAgICAgICAgY29sb3IgPSAiZ3JleSIsDQogICAgICAgICAgZmlsbE9wYWNpdHkgPSAwLjcsDQogICAgICAgICAgYnJpbmdUb0Zyb250ID0gVFJVRSksDQogICAgICAgIGxhYmVsT3B0aW9ucyA9IGxhYmVsT3B0aW9ucygNCiAgICAgICAgICBzdHlsZSA9IGxpc3QoImZvbnQtd2VpZ2h0IiA9ICJub3JtYWwiLCBwYWRkaW5nID0gIjNweCA4cHgiKSwNCiAgICAgICAgICB0ZXh0c2l6ZSA9ICIxNXB4IiwNCiAgICAgICAgICBkaXJlY3Rpb24gPSAiYXV0byIpKSAlPiUNCiAgICAgICAgYWRkTGVnZW5kKHBhbCA9IGNvbG91cnMsIHZhbHVlcyA9IGdhZG1fdmFscF9jb20kSURDLCBvcGFjaXR5ID0gMSwNCiAgICAgICAgdGl0bGU9IklEQyIpICU+JQ0KICAgICAgICBhZGRTY2FsZUJhcihwb3NpdGlvbj0iYm90dG9tbGVmdCIpDQptYXAyDQoNCmBgYA0KOjo6DQoNCjwhLS0gMjAyMS0xIC0tPg0KDQo6OjogcGFuZWwNCltQUENdey5wYW5lbC1uYW1lfQ0KDQpgYGB7ciwgZmlnLmFsaWduPSJjZW50ZXIiLCBtZXNzYWdlPUZBTFNFLCB3YXJuaW5nPUZBTFNFLCBlY2hvPUZBTFNFfQ0KDQpjb2xvdXJzIDwtIGNvbG9yTnVtZXJpYyhwYWxldHRlID0gIllsT3JSZCIsIGRvbWFpbiA9IGdhZG1fdmFscF9jb20kUFBDKQ0KbWFwMyA8LSBsZWFmbGV0KGRhdGE9Z2FkbV92YWxwX2NvbSkgJT4lDQogICAgICAgIGFkZFRpbGVzKCkgJT4lDQogICAgICAgIGFkZFBvbHlnb25zKGZpbGxDb2xvciA9IH5jb2xvdXJzKFBQQyksIGNvbG9yPSJncmV5Iiwgd2VpZ2h0PTEsDQogICAgICAgIGZpbGxPcGFjaXR5ID0gMC43LCANCiAgICAgICAgbGFiZWwgPSB+cGFzdGUoZ2FkbV92YWxwX2NvbSROQU1FXzMsIGdhZG1fdmFscF9jb20kUFBDKSwNCiAgICAgICAgaGlnaGxpZ2h0T3B0aW9ucyA9IGhpZ2hsaWdodE9wdGlvbnMoDQogICAgICAgICAgd2VpZ2h0ID0gNSwNCiAgICAgICAgICBjb2xvciA9ICJncmV5IiwNCiAgICAgICAgICBmaWxsT3BhY2l0eSA9IDAuNywNCiAgICAgICAgICBicmluZ1RvRnJvbnQgPSBUUlVFKSwNCiAgICAgICAgbGFiZWxPcHRpb25zID0gbGFiZWxPcHRpb25zKA0KICAgICAgICAgIHN0eWxlID0gbGlzdCgiZm9udC13ZWlnaHQiID0gIm5vcm1hbCIsIHBhZGRpbmcgPSAiM3B4IDhweCIpLA0KICAgICAgICAgIHRleHRzaXplID0gIjE1cHgiLA0KICAgICAgICAgIGRpcmVjdGlvbiA9ICJhdXRvIikpICU+JQ0KICAgICAgICBhZGRMZWdlbmQocGFsID0gY29sb3VycywgdmFsdWVzID0gZ2FkbV92YWxwX2NvbSRQUEMsIG9wYWNpdHkgPSAxLA0KICAgICAgICB0aXRsZT0iUFBDIikgJT4lDQogICAgICAgIGFkZFNjYWxlQmFyKHBvc2l0aW9uPSJib3R0b21sZWZ0IikNCm1hcDMNCg0KYGBgDQo6OjoNCg0KPCEtLSBUQ1AgLS0+DQoNCjo6OiBwYW5lbA0KW1RDUF17LnBhbmVsLW5hbWV9DQoNCmBgYHtyLCBmaWcuYWxpZ249ImNlbnRlciIsIG1lc3NhZ2U9RkFMU0UsIHdhcm5pbmc9RkFMU0UsIGVjaG89RkFMU0V9DQoNCmNvbG91cnMgPC0gY29sb3JOdW1lcmljKHBhbGV0dGUgPSAiWWxPclJkIiwgZG9tYWluID0gZ2FkbV92YWxwX2NvbSRSQ1ApDQptYXA0IDwtIGxlYWZsZXQoZGF0YT1nYWRtX3ZhbHBfY29tKSAlPiUNCiAgICAgICAgYWRkVGlsZXMoKSAlPiUNCiAgICAgICAgYWRkUG9seWdvbnMoZmlsbENvbG9yID0gfmNvbG91cnMoUkNQKSwgY29sb3I9ImdyZXkiLCB3ZWlnaHQ9MSwNCiAgICAgICAgZmlsbE9wYWNpdHkgPSAwLjcsIA0KICAgICAgICBsYWJlbCA9IH5wYXN0ZShnYWRtX3ZhbHBfY29tJE5BTUVfMywgZ2FkbV92YWxwX2NvbSRSQ1ApLA0KICAgICAgICBoaWdobGlnaHRPcHRpb25zID0gaGlnaGxpZ2h0T3B0aW9ucygNCiAgICAgICAgICB3ZWlnaHQgPSA1LA0KICAgICAgICAgIGNvbG9yID0gImdyZXkiLA0KICAgICAgICAgIGZpbGxPcGFjaXR5ID0gMC43LA0KICAgICAgICAgIGJyaW5nVG9Gcm9udCA9IFRSVUUpLA0KICAgICAgICBsYWJlbE9wdGlvbnMgPSBsYWJlbE9wdGlvbnMoDQogICAgICAgICAgc3R5bGUgPSBsaXN0KCJmb250LXdlaWdodCIgPSAibm9ybWFsIiwgcGFkZGluZyA9ICIzcHggOHB4IiksDQogICAgICAgICAgdGV4dHNpemUgPSAiMTVweCIsDQogICAgICAgICAgZGlyZWN0aW9uID0gImF1dG8iKSkgJT4lDQogICAgICAgIGFkZExlZ2VuZChwYWwgPSBjb2xvdXJzLCB2YWx1ZXMgPSBnYWRtX3ZhbHBfY29tJFJDUCwgb3BhY2l0eSA9IDEsDQogICAgICAgIHRpdGxlPSJSQ1AiKSAlPiUNCiAgICAgICAgYWRkU2NhbGVCYXIocG9zaXRpb249ImJvdHRvbWxlZnQiKQ0KbWFwNA0KYGBgDQo6OjoNCjo6Og0KDQpNZWRpYW50ZSBncsOhZmljb3Mgc2ltaWxhcmVzIHBvZGVtb3MgdmlzdWFsaXphciBsYXMgbm90YXMgcG9yIHNlbWVzdHJlDQoNCjo6OiBwYW5lbHNldA0KPCEtLSBJRFAgLS0+DQoNCjo6OiBwYW5lbA0KW01BVDAyMSAyMDE3LTFdey5wYW5lbC1uYW1lfQ0KDQpgYGB7ciwgZmlnLmFsaWduID0gImNlbnRlciIsIG1lc3NhZ2U9RkFMU0UsIHdhcm5pbmc9RkFMU0UsIGVjaG89RkFMU0V9DQoNCmNvbG91cnMgPC0gY29sb3JOdW1lcmljKHBhbGV0dGUgPSAiUmRCdSIsIGRvbWFpbiA9IDA6MTAwKQ0KbWFwNSA8LSBsZWFmbGV0KGRhdGE9Z2FkbV92YWxwX2NvbSkgJT4lDQogICAgICAgIGFkZFRpbGVzKCkgJT4lDQogICAgICAgIGFkZFBvbHlnb25zKGZpbGxDb2xvciA9IH5jb2xvdXJzKE1BVDAyMSksIGNvbG9yPSJncmV5Iiwgd2VpZ2h0PTEsDQogICAgICAgIGZpbGxPcGFjaXR5ID0gMC43LCANCiAgICAgICAgbGFiZWwgPSB+cGFzdGUoZ2FkbV92YWxwX2NvbSROQU1FXzMsIGdhZG1fdmFscF9jb20kTUFUMDIxKSwNCiAgICAgICAgaGlnaGxpZ2h0T3B0aW9ucyA9IGhpZ2hsaWdodE9wdGlvbnMoDQogICAgICAgICAgd2VpZ2h0ID0gNSwNCiAgICAgICAgICBjb2xvciA9ICJncmV5IiwNCiAgICAgICAgICBmaWxsT3BhY2l0eSA9IDAuNywNCiAgICAgICAgICBicmluZ1RvRnJvbnQgPSBUUlVFKSwNCiAgICAgICAgbGFiZWxPcHRpb25zID0gbGFiZWxPcHRpb25zKA0KICAgICAgICAgIHN0eWxlID0gbGlzdCgiZm9udC13ZWlnaHQiID0gIm5vcm1hbCIsIHBhZGRpbmcgPSAiM3B4IDhweCIpLA0KICAgICAgICAgIHRleHRzaXplID0gIjE1cHgiLA0KICAgICAgICAgIGRpcmVjdGlvbiA9ICJhdXRvIikpICU+JQ0KICAgICAgICBhZGRMZWdlbmQocGFsID0gY29sb3VycywgdmFsdWVzID0gZ2FkbV92YWxwX2NvbSRNQVQwMjEsIG9wYWNpdHkgPSAxLA0KICAgICAgICB0aXRsZT0iTUFUMDIxIikgJT4lDQogICAgICAgIGFkZFNjYWxlQmFyKHBvc2l0aW9uPSJib3R0b21sZWZ0IikNCm1hcDUNCg0KYGBgDQo6OjoNCg0KPCEtLSBJREMgLS0+DQoNCjo6OiBwYW5lbA0KW0ZJUzEwMCAyMDE3LTJdey5wYW5lbC1uYW1lfQ0KDQpgYGB7ciwgZmlnLmFsaWduPSJjZW50ZXIiLCBtZXNzYWdlPUZBTFNFLCB3YXJuaW5nPUZBTFNFLCBlY2hvPUZBTFNFfQ0KDQpjb2xvdXJzIDwtIGNvbG9yTnVtZXJpYyhwYWxldHRlID0gIlJkQnUiLCBkb21haW4gPSAwOjEwMCkNCm1hcDYgPC0gbGVhZmxldChkYXRhPWdhZG1fdmFscF9jb20pICU+JQ0KICAgICAgICBhZGRUaWxlcygpICU+JQ0KICAgICAgICBhZGRQb2x5Z29ucyhmaWxsQ29sb3IgPSB+Y29sb3VycyhGSVMxMDApLCBjb2xvcj0iZ3JleSIsIHdlaWdodD0xLA0KICAgICAgICBmaWxsT3BhY2l0eSA9IDAuNywgDQogICAgICAgIGxhYmVsID0gfnBhc3RlKGdhZG1fdmFscF9jb20kTkFNRV8zLCBnYWRtX3ZhbHBfY29tJEZJUzEwMCksDQogICAgICAgIGhpZ2hsaWdodE9wdGlvbnMgPSBoaWdobGlnaHRPcHRpb25zKA0KICAgICAgICAgIHdlaWdodCA9IDUsDQogICAgICAgICAgY29sb3IgPSAiZ3JleSIsDQogICAgICAgICAgZmlsbE9wYWNpdHkgPSAwLjcsDQogICAgICAgICAgYnJpbmdUb0Zyb250ID0gVFJVRSksDQogICAgICAgIGxhYmVsT3B0aW9ucyA9IGxhYmVsT3B0aW9ucygNCiAgICAgICAgICBzdHlsZSA9IGxpc3QoImZvbnQtd2VpZ2h0IiA9ICJub3JtYWwiLCBwYWRkaW5nID0gIjNweCA4cHgiKSwNCiAgICAgICAgICB0ZXh0c2l6ZSA9ICIxNXB4IiwNCiAgICAgICAgICBkaXJlY3Rpb24gPSAiYXV0byIpKSAlPiUNCiAgICAgICAgYWRkTGVnZW5kKHBhbCA9IGNvbG91cnMsIHZhbHVlcyA9IGdhZG1fdmFscF9jb20kRklTMTAwLCBvcGFjaXR5ID0gMSwNCiAgICAgICAgdGl0bGU9IkZJUzEwMCIpICU+JQ0KICAgICAgICBhZGRTY2FsZUJhcihwb3NpdGlvbj0iYm90dG9tbGVmdCIpDQptYXA2DQoNCmBgYA0KOjo6DQo6OjoNCg0KDQpBaG9yYSwgZWwgZ3JhZm8gZm9ybWFkbyBwb3IgbGFzIGNvbXVuYXMgZGUgbGEgcmVnacOzbiBxdWUgbm9zIHBlcm1pdGlyw6EgZm9ybWFyIGxhIG1hdHJpeiBkZSBjb250aWd1aWRhZCBzZSBwcmVzZW50YSBhIGNvbnRpbnVhY2nDs24NCg0KPGNlbnRlcj4NCg0KIVtdKGdyYWZvLnBuZyl7d2lkdGg9IjQ2MyJ9DQoNCjwvY2VudGVyPg0KDQo6OjogeyN2aXoxNjc0MjM2OTk4NjMyIC50YWJsZWF1UGxhY2Vob2xkZXIgc3R5bGU9InBvc2l0aW9uOiByZWxhdGl2ZSJ9DQo8bm9zY3JpcHQ+PGEgaHJlZj0nIyc+PGltZyBzcmM9Imh0dHBzOi8vcHVibGljLnRhYmxlYXUuY29tL3N0YXRpYy9pbWFnZXMvTWEvTWFwYXNfMTY3NDIzNjQ2Mzc2ODAvRGFzaGJvYXJkMS8xX3Jzcy5wbmciIGFsdD0iRGFzaGJvYXJkIDEgIiBzdHlsZT0iYm9yZGVyOiBub25lIi8+PC9hPjwvbm9zY3JpcHQ+DQoNCjxvYmplY3QgY2xhc3M9InRhYmxlYXVWaXoiIHN0eWxlPSJkaXNwbGF5Om5vbmU7Ij4NCg0KPHBhcmFtIG5hbWU9J2hvc3RfdXJsJyB2YWx1ZT0naHR0cHMlM0ElMkYlMkZwdWJsaWMudGFibGVhdS5jb20lMkYnIC8+IDxwYXJhbSBuYW1lPSdlbWJlZF9jb2RlX3ZlcnNpb24nIHZhbHVlPSczJyAvPiA8cGFyYW0gbmFtZT0nc2l0ZV9yb290JyB2YWx1ZT0nJyAvPjxwYXJhbSBuYW1lPSduYW1lJyB2YWx1ZT0nTWFwYXNfMTY3NDIzNjQ2Mzc2ODAmIzQ3O0Rhc2hib2FyZDEnIC8+PHBhcmFtIG5hbWU9J3RhYnMnIHZhbHVlPSdubycgLz48cGFyYW0gbmFtZT0ndG9vbGJhcicgdmFsdWU9J3llcycgLz48cGFyYW0gbmFtZT0nc3RhdGljX2ltYWdlJyB2YWx1ZT0naHR0cHM6JiM0NzsmIzQ3O3B1YmxpYy50YWJsZWF1LmNvbSYjNDc7c3RhdGljJiM0NztpbWFnZXMmIzQ3O01hJiM0NztNYXBhc18xNjc0MjM2NDYzNzY4MCYjNDc7RGFzaGJvYXJkMSYjNDc7MS5wbmcnIC8+IDxwYXJhbSBuYW1lPSdhbmltYXRlX3RyYW5zaXRpb24nIHZhbHVlPSd5ZXMnIC8+PHBhcmFtIG5hbWU9J2Rpc3BsYXlfc3RhdGljX2ltYWdlJyB2YWx1ZT0neWVzJyAvPjxwYXJhbSBuYW1lPSdkaXNwbGF5X3NwaW5uZXInIHZhbHVlPSd5ZXMnIC8+PHBhcmFtIG5hbWU9J2Rpc3BsYXlfb3ZlcmxheScgdmFsdWU9J3llcycgLz48cGFyYW0gbmFtZT0nZGlzcGxheV9jb3VudCcgdmFsdWU9J3llcycgLz48cGFyYW0gbmFtZT0nbGFuZ3VhZ2UnIHZhbHVlPSdlcy1FUycgLz48cGFyYW0gbmFtZT0nZmlsdGVyJyB2YWx1ZT0ncHVibGlzaD15ZXMnIC8+DQoNCjwvb2JqZWN0Pg0KOjo6DQoNCiMjIFJlc3VsdGFkb3MNCg0KIyMgQ29uY2x1c2lvbmVzIHkgdHJhYmFqb3MgZnV0dXJvcw0KDQpgYGB7anMsIGVtYmVkY29kZSwgZWNobyA9IEZBTFNFfQ0KdmFyIGRpdkVsZW1lbnQgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgndml6MTY3NDIzNjk5ODYzMicpOyAgICAgICAgICAgICAgICAgICAgDQp2YXIgdml6RWxlbWVudCA9IGRpdkVsZW1lbnQuZ2V0RWxlbWVudHNCeVRhZ05hbWUoJ29iamVjdCcpWzBdOyAgICAgICAgICAgICAgICAgICAgDQppZiAoIGRpdkVsZW1lbnQub2Zmc2V0V2lkdGggPiA4MDAgKSB7IHZpekVsZW1lbnQuc3R5bGUud2lkdGg9JzEwMCUnO3ZpekVsZW1lbnQuc3R5bGUuaGVpZ2h0PShkaXZFbGVtZW50Lm9mZnNldFdpZHRoKjAuNzUpKydweCc7fSBlbHNlIGlmICggZGl2RWxlbWVudC5vZmZzZXRXaWR0aCA+IDUwMCApIHsgdml6RWxlbWVudC5zdHlsZS53aWR0aD0nMTAwJSc7dml6RWxlbWVudC5zdHlsZS5oZWlnaHQ9KGRpdkVsZW1lbnQub2Zmc2V0V2lkdGgqMC43NSkrJ3B4Jzt9IGVsc2UgeyB2aXpFbGVtZW50LnN0eWxlLndpZHRoPScxMDAlJzt2aXpFbGVtZW50LnN0eWxlLmhlaWdodD0nNjEyN3B4Jzt9ICAgICAgICAgICAgICAgICAgICAgdmFyIHNjcmlwdEVsZW1lbnQgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCdzY3JpcHQnKTsgICAgICAgICAgICAgICAgICAgIHNjcmlwdEVsZW1lbnQuc3JjID0gJ2h0dHBzOi8vcHVibGljLnRhYmxlYXUuY29tL2phdmFzY3JpcHRzL2FwaS92aXpfdjEuanMnOyAgICAgICAgICAgICAgICAgICAgdml6RWxlbWVudC5wYXJlbnROb2RlLmluc2VydEJlZm9yZShzY3JpcHRFbGVtZW50LCB2aXpFbGVtZW50KTsgICAgICAgICAgICAgICAgDQo8L3NjcmlwdD4NCmBgYA0KDQpgYGB7anMsIGVjaG8gPSBGQUxTRX0NCnRpdGxlPWRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdoZWFkZXInKTsNCnRpdGxlLmlubmVySFRNTCA9ICc8aW1nIHNyYz0iTG9nbyBSTWFya2Rvd24ucG5nIiBhbHQ9IlRlc3QgSW1hZ2UiIHN0eWxlPSJ3aWR0aDogMjEwcHg7IGhlaWdodDogNDJweDsiPicgKyB0aXRsZS5pbm5lckhUTUwNCmBgYA0K